Рейтинг:
1
Rick York
Мистер Симмонс находится на правильном пути и k5054 также. Я использую вариант этого, чтобы сделать это :
sprintf( outputBuffer, "%020I64d", sixtyfourbitvalue );
Это будет двадцать цифр с ведущими нулями.
Кстати, в stdint.ч то есть это определение :
#define INT64_MAX 9223372036854775807i64
поэтому вы можете попробовать аналогичный формат. То есть, если вы используете visual studio. Это не стандартные форматы для 64-разрядных значений.
Для забавного упражнения попробуйте написать функцию, которая принимает 64-разрядное целое число и загружает текстовый буфер строкой, разделенной запятыми. Например: 1 234 456 890. В зависимости от вашего местоположения вы можете использовать точки для разделения тысяч, поэтому для получения бонусного кредита используйте локаль, чтобы выбрать соответствующий разделительный символ.
Member 14161770
То, что я пробовал, - это long long i=0;
printf("\nenter num\n");
scanf ("%lld",&i);
printf("%0020lld",i);
но в o/p я получаю 2 цифры дополнительно:
напр.:
я/п:100872063196938702
о/р:0010087206319693870246
В чем же ошибка?
Richard MacCutchan
Смотрите мое решение ниже.
Рейтинг:
1
Richard MacCutchan
Вам необходимо указать минимальный количество цифр для печати в вашем формате, поэтому используйте следующее:
printf("%.20lld\n", license);
Это позволит правильно вывести все значения, например:
00123456789876543219
00000000000123456789
Однако, если вы не используете это значение в вычислениях, вы можете просто ввести его в виде строки, а затем добавить необходимое количество нулей.
Member 14161770
Кажется, что ничего не работает, и интересная часть заключается в том, что его часть-это печать какой-то случайной величины. Но на обычном компиляторе это работает
напр.:
printf("%020lld",i);
я/п: 102012000000000001
о/р : 0010201200000000000120
Richard MacCutchan
Я протестировал код на нескольких различных значениях, поэтому я уверен, что он работает правильно. Поэтому вам нужно показать нам свой код, мы не можем догадаться, что не так.
Richard MacCutchan
Ваша строка формата все еще неверна. Вам нужно использовать спецификатор точности, который использует точку (символ полной остановки) перед значением количества символов, т. е. %.20lld
Member 14161770
Если я попробую то же самое в своей env. its не работает. Я попробовал использовать онлайн-компилятор, он работает
Richard MacCutchan
Мне очень жаль, но я понятия не имею, как выглядит ваш код или что происходит, когда вы его запускаете. Какова ваша среда, какой компилятор вы используете, что на самом деле происходит в вашем коде?
Member 14161770
Сейчас это работает. Мой компилятор куб. см, ОКР-экс код :
главный()
{
long long i=0;
printf("\nenter num\n");
scanf ("%lld",&i);
printf("%.020lld\n",i);
}
Итак, загвоздка здесь в том, что есть шанс, что мое значение также будет иметь длину 20 цифр.
В этом случае, если я передаю 20-значное значение (меньше 2^64 -1), это печатает мусор. Остальное все дело (для всех цифр длины) его работы. В чем проблема для 20-значного числа?
Richard MacCutchan
Вы все еще используете неверную строку формата.
Прости, старина.
Member 14161770
Пожалуйста, проверьте :
#включить<stdio.h>
#include<stdlib.h>
главный()
{
long long int i=0,cp=0;
int count=0,d=0;
int l=20;
printf("\neneter num\n");
scanf ("%lld",&i);
cp=i;
в то время как(i != 0)
{
++считать;
i /= 10;
}
printf("%d - общее количество\n",count);
d=l-количество;
если(d!=0){
printf("%.020lld\n",cp);
}
еще{
printf("%lld",cp);
}
}
Richard MacCutchan
Извините за мой предыдущий комментарий, я неправильно понял.
Проблема в том, что максимальное значение для long long равно 18446744073709551615, но вы должны объявить переменную как unsigned, иначе она будет считаться отрицательным числом. Попробуйте выполнить следующий код:
unsigned long long int i=0;
printf("\nenter num\n");
scanf("%llu",&i);
printf("%.20llu\n",cp);
Однако, как упоминалось ранее, если вам действительно не нужно использовать это число в вычислениях, было бы лучше прочитать и сохранить его в виде символьной строки. Тогда было бы довольно легко подсчитать количество символов (через strlen) и добавить любые дополнительные нули в начале, чтобы отобразить его.
Member 14161770
Это решение, кажется, работает, кроме того, я попробую использовать строковую логику
Рейтинг:
0
#realJSOP
используйте sprintf, чтобы отформатировать его с ведущими нулями.
k5054
т.е..
long long license = 12345678987654321L;
printf("%020lld", license)
выход 00012345678987654321
Member 14161770
получение предупреждения как "(W) целочисленная константа 123456789876543219L вне диапазона"
#realJSOP
Ни один целочисленный тип (кроме десятичного) не может содержать 20 цифр. Попробуйте привести свое значение к десятичной дроби, прежде чем использовать printf.
Member 14161770
Есть ли кастинг в C?
Richard MacCutchan
Правильный формат-это %.20lld
.