Перейти к содержимому

Как вывести первую цифру числа в c

  • автор:

Как вывести первую цифру числа в c

Сообщений: 1,833

Дело в том, что он использует вещественные числа. Если воспользуетесь функцией printf из библиотеки msvcrt.dll и шаблоном вида «Result = %3.5lf», тогда сможете вывести результат в консоль. lf — это для dq. Если изменить тип у Result на dd, тогда достаточно использовать просто f («Result = %3.5f»)

; fasm1 ver. 1.73.30 ; Windows EXE 32-bit ; INCLUDE=FASM\INCLUDE format PE CONSOLE 5.0 at 0x00010000 include "win32a.inc" section '.idata' import data readable writeable library kernel32.dll, "kernel32.dll",\ msvcrt.dll, "msvcrt.dll" import kernel32.dll,\ ExitProcess, "ExitProcess",\ GetConsoleMode, "GetConsoleMode",\ GetStdHandle, "GetStdHandle",\ ReadConsoleA, "ReadConsoleA",\ SetConsoleMode, "SetConsoleMode",\ WriteConsoleA, "WriteConsoleA" import msvcrt.dll,\ printf, "printf" section '.data' data readable writeable x1 dd 2f y1 dd 5.0f x2 dd 11.2 y2 dd -5.1 ResultQ dq ? ResultD dd ? formatStr db "Result = %5.7lf", 13, 10, 0 section '.text' code readable executable entry $ fld [x2] ; st0 = x2 fsub [x1] ; st0 = x2 - x1 fmul st0, st0 ; st0 = (x2 - x1)^2 fld [y2] ; st0 = y2; st1 = (x2 - x1)^2 fsub [y1] ; st0 = y2 - y1; st1 = (x2 - x1)^2 fmul st0, st0 ; st0 = (y2 - y1)^2; st1 = (x2 - x1)^2 faddp st1, st0 ; st0 = (x2 - x1)^2 + (y2 - y1)^2 fsqrt ; st0 = квадратный корень((x2 - x1)^2 + (y2 - y1)^2) fstp [ResultQ] cinvoke printf, formatStr, dword [ResultQ + 0], dword [ResultQ + 4] mov eax, 123 mov ecx, 100 cdq idiv ecx add al, '0' push eax mov word [esp + 1], 0x0A0D invoke GetStdHandle, STD_OUTPUT_HANDLE lea ecx, [esp - 4] mov edx, esp invoke WriteConsoleA, eax, edx, 3, ecx, NULL, NULL pop edx pop ecx call WaitAnyKey invoke ExitProcess, 0 ; Вот пропрограмма ожидания нажатия любой клавиши. Добавил вывод соответствующего сообщения, чтобы была понятна причина остановки. define ENABLE_ECHO_INPUT 4 define ENABLE_LINE_INPUT 2 WaitAnyKey: push ebx push NULL push NULL push NULL invoke GetStdHandle, STD_OUTPUT_HANDLE lea edx, [.message] lea ecx, [esp + 4] invoke WriteConsoleA, eax, edx, .message.Length, ecx, NULL invoke GetStdHandle, STD_INPUT_HANDLE mov ebx, eax invoke GetConsoleMode, ebx, esp mov eax, [esp] and eax, not (ENABLE_ECHO_INPUT or ENABLE_LINE_INPUT) invoke SetConsoleMode, ebx, eax lea edx, [esp + 8] lea ecx, [esp + 4] invoke ReadConsoleA, ebx, edx, 1, ecx, NULL invoke SetConsoleMode, ebx add esp, 8 pop ebx retn .message db 13, 10, 'Press any key. . .', 13, 10, 13, 10 .message.Length = $ - .message

Последний раз редактировалось macomics; 25.04.2023 в 02:23 .

Анализ алгоритма

Если число отрицательное, то поменяем его знак, сделав его положительным – от этого первая цифра не изменится. Делим число на 10 до тех пор, пока не останется в нем одна цифра – это и будет первая цифра исходного числа.

Читаем целое число n.

Если число отрицательное, то сделаем его положительным.

Делим число на 10, пока оно не будет содержать только первую цифру.

Выводим первую цифру числа.

Java р еализация

import java.util.*;

public class Main

public static void main(String[] args )

Scanner con = new Scanner(System. in );

long n = con .nextLong();

while ( n > 9)

System. out .println( n );

Как вывести первую цифру числа в c

Регистрация: 15.01.2011

Сообщений: 1

Разложение числа и замена цифры значением как оптимизировать

Добрый день форумчане. Прошу помочь с решением задачи Дейтела.
Программированием занялся недавно так что просьба не пинать сильно за код.
Текст задачи Программа должна считывать 4-х значное целое число и шифровать его следующим образом: «Заменить каждую цифру значением суммы этой цифры и 7 по модулю 10 затем поменять местами первую цифру и третью вторую и четвертую. Затем вывести зашифрованное целое число.
Прога вроде все считает за исключением: если первая цифра числа равна 0, и если третья равна 3 (тогда получается ноль и на выходе 3-х значное число). Не могу придумать как реализовать это не увеличивая разрядность числа до 8.
Ниже привожу код программы:

#include #include main() < int c=0,c1=0,c2=0,c3=0,c4=0,c5=0,c0, i=0; cout > c; while (c!=0) =10) c0-=10; c/=10; i++; if(i==1) c4=c0; if(i==2) c3=c0; if(i==3) c2=c0; if(i==4) c1=c0; > c5=10*(100*c3+10*c4+c1)+c2; cout

Последний раз редактировалось Stilet; 15.01.2011 в 18:12 .

Petrovich12
Посмотреть профиль
Найти ещё сообщения от Petrovich12

Сумма первой и последней цифр числа

Найти сумму первой и последней цифр любого целого положительного числа.

Извлечь последнюю цифру числа легко: достаточно найти остаток от деления на 10. В языке Паскаль это делается с помощью оператора mod .

Чтобы извлечь первую цифру числа, надо знать его разрядность, после чего найти остаток от деления 10 в степени «разряд минус 1». Так, если число трехзначное, то надо делить на 100, то есть 10 2 . Однако программа разрядности числа не знает.

Поэтому, чтобы извлечь первую цифру числа, будем последовательно делить число нацело на 10, пока от него не останется одна цифра, которая и будет первой. После этого найти ее сумму с последней цифрой, которая была найдена ранее.

var n: longint; a, b: byte; begin readln(n); a := n mod 10; // последняя цифра исходного числа n := n div 10; // удаляем ее из числа while n > 0 do begin b := n mod 10; // текущая последняя цифра n := n div 10; end; writeln(a + b); end.

В коде выше в переменную a записывается последняя цифра. После чего число делится нацело на 10 и эта цифра исключается. Далее в цикле постепенно число сокращается на один разряд с помощью div . Перед этим удаляемая цифра присваивается переменной b . Когда все цифры числа будут удалены, то в переменной b останется первая. После цикла значение переменных складывается.

Более компактное решение:

var a: longint; b: byte; begin readln(a); b := a mod 10; while a >= 10 do a := a div 10; writeln(b+a); end.

Здесь число a в цикле постепенно сокращается до одного первого разряда. Перед этим самый младший разряд, то есть последняя цифра числа сохраняется в переменной b .

Решить задачу можно не только с помощью цикла while , но и repeat :

var a, b, c, d: integer; begin readln(a); d := a mod 10; repeat b := a mod 10; a := a div 10; until a = 0; c := d + b; writeln(c); end.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *