【问题标题】:How to add 2 to each digit in a 4 digit number in C如何将2添加到C中的4位数字中的每个数字
【发布时间】:2019-01-09 21:39:38
【问题描述】:

我正在尝试解决本教程练习题,该练习题没有我可以检查我的代码的答案。目标是编写一个程序来显示数字为2 的数字大于输入数字的相应数字。所以如果输入的数字是5656,那么输出的数字应该是7878。我已经想出了如何分隔每个数字并添加它们,但我似乎无法让它们以 四位 序列打印。


#include <stdio.h>

int main ()
{
    int n, one, two, three, four, final;
    scanf("%d", &n);

    one   = (n / 1000);
    n     = (n % 1000) + 2;
    two   = (n / 100) + 2;
    n     = (n % 100) + 2;
    three = (n / 10) + 2;
    n     = (n % 10) + 2;
    four  = (n / 1) + 2;
    n     = (n % 1) + 2;

    final = (one * 1000) + (two * 100) + (three * 10) + four;

    printf("%d", final);
    return 0;
}

【问题讨论】:

  • 您的算法不正确 - 您应该只在“分隔”行上添加两个,而不是“模数”行。
  • 对于8989 这样的输入,你会做什么?
  • 你不能只做final = n + 2222; 吗?
  • @RingØ 是的任何四位数字,程序应该为每个数字添加两个。
  • Sander 的解决方案一定适合您。

标签: c


【解决方案1】:
#include <stdio.h>
int main()
{
     int n,a[4], final;
    scanf("%d", &n);
    for(int i=3;i>=0;i--)
    {
        a[i]=n%10+2;
        n/=10;
    }
    final = (a[0] * 1000) + (a[1] * 100) + (a[2] * 10) + a[3];
    printf("%d", final);
    return 0;
}

【讨论】:

  • 所以我使用变量 a 我创建了一个数组?
  • 是的[a]是一个int数组
  • 我懒得写四个 div 和 mod,为四个不同的变量 :) 祝你好运!
  • 这很好用,但是数组和 for 语句在本教程中更进一步。您的代码确实看起来好多了,而且比答案更短。
【解决方案2】:

以下函数适用于 N 位数。 想法是从输入数字中提取每个数字并添加其小数位。

#include <stdio.h>

int power(int x, int y)
{
  int res = 1;
  for (;y>0;y--)
  {
    res *=x;
  }
  return res;
}
int main ()
{
    int n;
    scanf("%d", &n);
    int sum = 0;
    int i=0;
    while(n>0)
    {
       sum += ((n%10) +2)*power(10,i);
       i++;
       n /=10;
    }

    printf("%d", sum);
    return 0;

}

【讨论】:

  • 哎哟,powreally?
  • 我应该在帖子中指出不允许使用数组和语句,因为它们没有被覆盖。这真的是基本的东西。将学习编辑帖子。
  • 在这个答案中没有使用数组。
  • 好吧,不用int i = 0; … { …something * pow(10, i); … ++i; … },为什么不用简单的int i = 1; … something * i; … i *= 10; … }
【解决方案3】:

另一个想法:

char str[10]; // enough to contain an int as string + 1
char *s = str+sizeof(str); // points to last char + 1
int n;

scanf("%d", &n);
*--s = 0;  // terminate the string

while(n) {
    *--s = (((n % 10)+2)%10) + '0'; // write a char from the end
    n /= 10;
}
printf("%s\n", s);

【讨论】:

    【解决方案4】:
        int a = 5696;
        //      output is 7818
        // ---------Java-----------
        // --------solution--------
    
    
    
        int first  = a/1000+2;
        
        int b = a%1000;
        int second = b/100+2;
        
        int c = b%100;
        int d = c/10+2;
        int third = d/10;
        
        int e = c%10;
        int fourth = e+2;
        
        String result = Integer.toString(first)+Integer.toString(second)+Integer.toString(third)+Integer.toString(fourth);
                
        System.out.println(result);
    

    【讨论】:

    • 只有代码答案通常是不好的答案。最重要的是,Java 版本对这个问题的有用性似乎值得怀疑。我建议您以至少突出此处的 Java 特性的方式编辑您的答案。
    猜你喜欢
    • 1970-01-01
    • 2022-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    相关资源
    最近更新 更多