2014-01-04 4 views
-1

мне нужно сделать пользователю ввести в long long int значение с, а затем оценить эту Пример значенияоценки «длинный длинный ИНТ» в с

long long int x = 1234567; 

Тогда моя оценка должна знать нет. из Elemente и цифры в каждой позиции:

if(digit at 2nd position == 2) 
{ 
do something; 
}else{ 
do something else; 
} 

я попытался преобразовать его в массив, но проблема в том, как я могу получить размер массива заранее, когда я не знаю, что пользователь вводит, например, один пользователь может ввести 1234 какой-либо другой может набрать 211212121212.

+0

Почему 'долго long'? Намерены ли вы в конечном счете обрабатывать сколь угодно длинный ввод? – user1537366

+4

Почему бы не ввести пользователя как строку вместо целого? – Nabla

ответ

1

Распечатать long long в строку sprintf, а затем получить результат по символу.

Редактировать: если вы используете этот подход, вы также должны обрабатывать случай отрицательного значения.

0

попробовать использовать на следующие

двойной Num = 23,345;

int intpart = (int) num;

double decpart = num - intpart;

printf ("Num =% f, intpart =% d, decpart =% f \ n", num, intpart, decpart);

Теперь вы отправили строку из десятичной и целочисленной части ... теперь приступите к вычислению, умножив десятичное число на 10 и сохраните каждый в массиве (скажем). В качестве альтернативы вы также можете умножить длинную десятичную на 1, а затем число цифр (например, 5 на 5 баллов после десятичной) & позже может взять их с% opeartor.

+0

Вы также можете сделать число, которое нужно преобразовать в строку и прочитать символы в каждой точке.& позже преобразовывая его в целочисленное значение ... –

+0

Я не вижу, как это отвечает на вопрос, откуда приходит двойник? – Nabla

+0

Вы можете добавить длинный длинный ... это был только пример –

1

Преобразовать число в строку используйте символ с индексом 1, чтобы проверить второй номер следующим образом:

char buf[20] = 0; 
long long int number = 1234567LL; 
snprintf(buf, 20, "%lld", number); 
if (buf[1] == '2'){ // second char is 2 
} 
else{ 
} 

код:

#include<stdio.h> 
char* str(char* buf, long long int number) 
{ 
    snprintf(buf, 21, "%lld", number); 
    return buf; 
} 
int main(){ 
    long long int number = 1234567LL; 
    char buf[20] = ""; 
    if(str(buf, number)[1] == '2'){ 
     printf("yes"); 
    } 
    else{ 
     printf("No"); 
    } 
    printf("\n"); 
    return 0; 
} 
1

Математически можно использовать CEIL (log10()), чтобы определить число цифр и/или ряд делений/модулей/вычитаний для определения значения цифр в позиции X. Преобразование в массив символов было бы самым простым решением, как указано (sprintf, itoa).

1
#include <stdio.h> 

int main(void) 
{ 
    long long int x = 1234567, i = x; 

    while (i >= 100) i /= 10; 
    printf("%lld\n", i % 10); /* prints the second digit */ 
    return 0; 
} 

Или поставить его в функцию (работает также и для негативов):

#include <stdio.h> 
#include <math.h> 

/* returns x digit or -1 */ 
int xdigit(long long int x, int pos) 
{ 
    long long int e = pow(10, pos); 

    if (x < 0) x = -x; 
    if (x < e/10) return -1; 
    while (x >= e) x /= 10; 
    return x % 10; 
} 

int main(void) 
{ 
    long long int x = 1234567; 

    printf("%s\n", xdigit(x, 2) == 2 ? "yes" : "no"); 
    return 0; 
} 

Должен быть составлен с -lm для math.h

0

Вам действительно нужно долго долго Int? Если пользователь вводит номер в виде строки,

char bignum[64]; 
int ii 

fgets(bignum, sizeof(bignum), stdin); 

for (ii = 0; ii < strlen(bignum); ++ii) 
    printf("character %d is %c", ii, bignum[ii]); 
+0

Обратите внимание, что это будет включать в себя новую строку в 'bignum' и печатать ее как последний символ в цикле. – Nabla

+0

Да, это правда. Также, если нет символа новой строки, пользователь имеет ввод 63 или более символов. – cup

-1
please give me comment on the code  
Thy this code it uses division to find of number of digits 
and uses division and modulo to digits at different positions 
#include <stdio.h> 
void main() 
{ 
long long int i,x = 1234567; 
int n=0; 
i=x; //make a copy of x 
//block to find number of digit 
for(;i!=0;i/=10) 
{ 
n++; 
} 
printf("number of digits %d\n",n); 
//Display digits 
for(;x!=0;x/=10,n--) 
{ 
printf("element at %d is %d\n",n,x%10); 
} 
} 
Смежные вопросы