Как выполнить суммирование последовательных двух цифр пар данного целого числа из массива символов в c?

#c

#c

Вопрос:

Я пробовал таким образом ->

 #include <stdio.h>
int
main(void){
char number[101] = { 0 };
int isValid = 0, count = 0;

/*Input validation */
while(!isValid)
{
    count=0;
    isValid = 1;
    char *p = number;

    printf("Enter a number: ");
    scanf("0s", number);

    /* Check the validity of the string */
    while(*p != '')
    {
        count  ; //count=1
        if(!isdigit(*p))
        {
            isValid = 0;
            break;
        }
        p  ;
    }

    if( !(isValid = isValid amp;amp; ( count % 2 == 0 ) ) )
      printf("Please insert an even number of digits (numbers only)n");
}
 //print the digits
 for(int i=0; i<count; i =2)
    printf("%c%cn", number[i], number[i 1] );
return 0;

}
  

Теперь здесь показано ограничение: я могу показать только пару цифр данного целого числа. Но я не смог выполнить сложение этих пар?. Как я могу это сделать ?.

Я хочу реализовать: Ожидаемый ввод: 123456

Ожидаемый результат: 12 34 56 = 102

Ответ №1:

Стратегия заключалась бы в объединении двух char цифр в строку, а затем преобразовании ее в целочисленное значение с использованием библиотечной функции, подобной strtol , это позволит вам суммировать значения:

 #include <stdlib.h>
//...
long sum = 0; //to hold the sum
for (int i = 0; i < count; i  = 2)
{
    long temp;
    char str[] = {number[i], number[i   1]}; //concatenate the 2 char digits into a string
    char *endptr; //pointer to the next char after the last converted digit
    temp = strtol(str, amp;endptr, 10); //10, decimal conversion
    sum  = temp; //add converted value
    printf("%c%cn", number[i], number[i   1]);
}
printf("%d", sum);
//...
  

Вывод:

 12
34
56
102
  

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

Ответ №2:

Похоже, у вас две проблемы: ваш массив состоит из пар символов, которые вам нужно преобразовать в числа.

Позвольте мне показать вам один из способов сделать это:

 char c1, c2;
c1 = number[<whatever_index>];     // just take a character from your numbers array.
c2 = number[<whatever_index>   1]; // just take the next character from your array.
int i1 = c1 - '0';                 // Like this, you can transform a character to an integer;
int i2 = c2 - '0';                 // idem dito :-)
int i = 10*i1   i2;                // how to you "append" two digits into an integer number?
  

Отсюда вы можете рассчитать свою сумму.

Редактировать, прочитав ответ от Anastaciu

Действительно, есть два способа сделать это: либо вы объединяете два символа и преобразуете результат в целое число, либо вы преобразуете два символа в целые числа и используете математический способ их «объединения».

Удачи

Ответ №3:

Есть 2 способа — преобразовать пары символов в целое число, найти сумму с целыми числами, затем преобразовать полученное целое число обратно в символы (внутри printf() ); или сохранить его как символы и найти сумму с символами. Оба других ответа используют первый способ (преобразование в / из целого числа).

Второй способ может выглядеть так:

     // Create some variables to store the sum as 3 chars

    char low = '0';
    char mid = '0';
    char high = '0';

    // Add pairs of digits to the sum

    for(int i=0; i < count; i  = 2) {
        low  = number[i 1] - '0';
        if(low > '9') {
            low -= 10;
            mid  ;
        }
        mid  = number[i] - '0';
        if(mid > '9') {
            mid -= 10;
            high  ;
        }
    }

    // Output the resulting characters (with leading zeros suppressed)

    if(high != '0') {
        putchar(high);
        putchar(mid);
    } else if(mid != '0') {
        putchar(mid);
    }
    putchar(low);