循环求和字符串C中的数字

时间:2019-03-21 16:08:58

标签: c

我有一个程序,可以对字符串中的数字求和。但是我需要一个循环,当它不是一个密码数时,它将求和。例如,我的输入为数字12345。总和为15(1 + 2 + 3 + 4 + 5),并且此数字15必须再相加一次,输出必须为6。(5 + 1)。它适用于任何数量。感谢您的帮助。

int main() {

    char string[100000];
    int i;
    int sum=0;


    scanf("%s", string);


    for(i = 0; string[i] != '\0'; i++){
        sum += (string[i] - '0');
    }

    printf("%d\n", sum);
    return 0; 
}

3 个答案:

答案 0 :(得分:1)

int main()
{
   int n, t, sum = 0, remainder;

   t = n;
   while (t != 0)
   {
      remainder = t % 10;
      sum       = sum + remainder;
      t         = t / 10;
   }

   printf("%d\n", sum);
   return 0;
 }

这里n是您的旧款项。 这是一般的想法。请根据您的需求定制代码。

答案 1 :(得分:1)

int n = atoi(string);
printf("Sum of digits is %d\n", (!(n%9) && n) ? 9 : n%9);

有关详细信息,请参见Sum of all digits for a given Positive Number

IDEOne Link

答案 2 :(得分:1)

我将为您编写一个代码段,您的任务是了解其工作原理(提示检查模9会发生什么情况)

#include<stdio.h>
#include<ctype.h>
#define BUFSIZE 1024
int main()
{
        char buf[BUFSIZE];
        size_t i;
        int modsum=0;
        if (fgets(buf,BUFSIZE,stdin) == NULL)
        {
                puts("Error reading the string");
                return 1;
        }
        for (i=0;i<BUFSIZE && buf[i]!=0 && buf[i]!='\n';i++)
        {
                if (!isdigit(buf[i]))
                {
                        puts("The string is invalid");
                        return 2;
                }
                modsum=(modsum+(buf[i]-'0'))%9;
        }
        printf("%d\n",modsum?modsum:9);
        return 0;
}

此代码适用于除0以外的任何数字。