如何在整数中添加每个数字

时间:2017-05-04 03:41:16

标签: c++

这是问题,我不知道该怎么做

  
      
  1. (7分)编写名为 AddDigit int 函数,该函数将整数作为输入它返回所有数字的总和   可以被3或5整除。例如,
  2.         

    AddDigit(13579) - 它返回17(即3 + 5 + 9),因为3,5和9可以被3或5整除

         

    AddDigit(355) - 它返回13(即3 + 5 + 5),因为3和5可以被3或5整除

         

    AddDigit(248) - 它返回0,因为没有数字可被3或5

    整除

这是我的代码:

    #include <stdio.h>
    #include <cstring>
    #include<time.h>
    #include<iostream>
    using namespace std;
    int AddDigit(char a[]) {
        int sum = 0, numberofdigit;
        numberofdigit = strlen(a);
        for (int i = 0; i < strlen(a)-1; i++) {
            if ((a[i] % 3 == 0 || a[i] % 5 == 0)&&a[i]!=0) {
                sum += a[i];
            }
        }
        return sum;
    }
    int main() {
        char b[10];
        cin >> b;
        cout<<AddDigit(b);
     }

3 个答案:

答案 0 :(得分:3)

您将输入作为字符数组,字符&#39; 0&#39;不同于整数0,
&#39; 0&#39;的ASCII这是48
ASCII为0,即0 你为什么得到50分?&#39; 123&#39;因为&#39; 2&#39;意味着50%5 == 0,所以你添加了&#39; 2&#39;总和。

为了获得你想要的东西,你需要得到char数组的等价整数,d = arr [i] - &#39; 0&#39;

newData

答案 1 :(得分:1)

从读取赋值时,AddDigit函数应该采用int参数,而不是字符数组,字符串或任何其他基于字符的类型。因此,您的方法开始不正确,因为它违反了作业的要求。

因此,方法是弄清楚如何从int剥离每个数字,并从该数字中确定它是否可被3或5整除。使用简单模数和传入的连续除法整数,方法可以是这样的:

int AddDigit(int n)
{
    int total = 0; // final total
    while (n > 0)
    {
        int digit = n % 10; // get rightmost digits

        // add the value if digit is either evenly divisible by 3 or 5
        total += ((digit % 3 == 0 || digit % 5 == 0) ? digit : 0);

        // remove the last digit from the number
        n /= 10;
    }
    return total;
}

请注意,如果三元条件返回false,则添加到总计的行将添加0。这个条件是检查数字是否可以被3或5整除。如果条件是true,我们只需将该数字加到总数上。

答案 2 :(得分:0)

在递归函数中可能会更加整洁:

int AddDigit(int num)
{
    if (num == 0)  //WE REACH THIS WHEN 1-DIGIT NUMBER IS DIVIDED BY 10
            return 0;

    int curNum = num % 10;  //ALWAYS ACCOUNTING FOR ONLY LAST DIGIT


    //WE ADD IT OR NOT AND THEN CONTINUE TO THE NEXT DIGIT

    if (curNum % 3 == 0 || curNum % 5 == 0)
            return curNum + AddDigit(num/10);
    else
            return AddDigit(num/10);


}