【问题标题】:C program that outputs if a number is divisble by 3 or not一个数字的输出是否能被3整除的C程序
【发布时间】:2020-09-18 19:01:17
【问题描述】:

我是编程新手,我必须在 C 中进行赋值。我必须编写一个程序来读取整数 n 并在它可被 3 整除时输出。不幸的是,我不允许使用 % 运算符检查这个。 “一个正整数能被 3 整除当且仅当它的所有数字之和能被 3 整除。”所以程序必须添加n的数字,如果它大于9,我必须添加这个数字的数字等,直到数字之和等于或小于9。因为那我可以说n 是否能被 3 整除。我还必须每次打印丢失数字的数量。例如:输入:9999-----输出:9999 -> 36 -> 9。是。 我做了一个循环:

    while(n>9){
    lastDigit = n%10;
    sumDigits += lastDigit;
    n = (n-lastDigit)/10;
 }
    sumDigits = sumDigits + n; /*this is the sum of the digits*/

现在如果它大于 9,我必须再次在循环中输入这个数字,但我不知道该怎么做。我用 if else 语句制作了 3 个其他循环,但这样我的程序就太长了。我怎样才能使我的程序更短?因为有些数字需要多次循环。

谢谢。

尼克

【问题讨论】:

  • 到底是什么问题?
  • n = (n-lastDigit)/10; 为什么是-lastDigit 部分?只需丢弃最后一位,n = n / 10 即可完成。
  • 有趣的是,您可以使用% 来获取数字...为了避免这种情况并简化您的生活,您可以使用sprintf 将您的数字转换为数字字符串。
  • @EugeneSh。不幸的是,我只能使用过去两周从 C 中学到的可能性。这只是基本的东西。
  • @VladfromMoscow。是的,它很奇怪。但是我的作业说当这个数小于9时,你可以断定它是否能被3整除,那么它是9、6还是3。

标签: c loops


【解决方案1】:

这里需要两个循环——一个循环只要n > 9,另一个循环遍历n 的数字并将它们相加:

int origN = n;
while (n > 9) {
    int sum = 0;
    int tmp = n;
    while (tmp > 0) {
        int lastDigit = n % 10;
        sum += lastDigit;
        tmp /= 10;
    }
    n = sum;
} 

if (n == 3 || n == 6 || n == 9) {
    printf("%d is divisible by 3\n", origN);
} else {
    printf("%d is not divisible by 3\n", origN);
}

【讨论】:

  • 谢谢!我已经想我需要一个 while 循环或其他东西中的一个 while 循环,但不知道如何。您唯一的错误是它必须是:n = sum+tmp,而不仅仅是 n = sum。但是感谢您的帮助!
  • 根据问题陈述,输入可能是整数,因此您必须允许负值和零。
猜你喜欢
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多