#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);