你能把总数倒过来吗?(循环C)

你能把总数倒过来吗?(循环C),c,if-statement,reverse,C,If Statement,Reverse,“你能倒数吗”是指已经用Mod(%)倒数的数字。我的问题是,它能恢复正常吗 例如,如果您输入数字“2552”,它将变为“2+5+5+2”,这是正确的,但当您输入另一个数字如“4125”时,它将变为“5+2+1+4”,而不是“4+1+2+5” 好的,我刚进入编程界,是个新手 如果是“if”,它可以添加“+”而不超过“4+1+2+5+”这样的数字吗 “5”之后有“+”,我如何删除这个额外的“+” #包括 main(){ int a,b,h=0; printf(“输入数字:”); scanf(“%d”

“你能倒数吗”是指已经用Mod(%)倒数的数字。我的问题是,它能恢复正常吗

例如,如果您输入数字“2552”,它将变为“2+5+5+2”,这是正确的,但当您输入另一个数字如“4125”时,它将变为“5+2+1+4”,而不是“4+1+2+5”

好的,我刚进入编程界,是个新手

如果是“if”,它可以添加“+”而不超过“4+1+2+5+”这样的数字吗 “5”之后有“+”,我如何删除这个额外的“+”

#包括
main(){
int a,b,h=0;
printf(“输入数字:”);
scanf(“%d”和“&a”);
printf(“%d=”,a);
while(a!=0)
{
b=a%10;
a=a/10;
printf(“%d”,b);
如果(b!=a)
{
printf(“+”);
}
h=h+b;
}
printf(“=%d\n”,h);
}

您可以扫描用户的字符串,而不是扫描实际数字。字符串很容易反转:

char num[5]; // Has the input
char rev[5]; // Will have the reverse
int len = strlen(num);
rev[len] = 0; // End the string
for(int i = 0; i < len; i++){
    rev[i] = num[len-i-1];
}
charnum[5];//有意见吗
字符版本[5];//反之亦然
int len=strlen(num);
rev[len]=0;//结束
对于(int i=0;i
您可以先取数字中的最高数字,而不是最低数字,这样做可以向后退,例如:

int currentLog10;
int powerOfTenForCurrentDigit;

...

while(a != 0)
{
  currentLog10 = (int)log10(a);

  powerOfTenForCurrentDigit = (int)pow(10, currentLog10);

  b = a/powerOfTenForCurrentDigit;
  a = a - b * powerOfTenForCurrentDigit;

  ...
}
它是如何工作的:

  • 4125的log10会给我们3
  • b被设置为4125除以1000(10^3)=4
  • a设置为4125-4*1000=125
  • 下一步,125中的log10给出2,我们通过10^2(100)进行划分,依此类推
  • 最后一步5得到0,5除以10^0(1)得到5,a变成5-5*1,也就是0,我们完成了

在边缘情况下必须小心,log10返回类似于(n-1).99999999的值而不是n,但是对于在程序中输入的小数字,不应该发生这种情况。可能会为输入添加一些健全性检查。

请尝试问一个特定的问题,并省略诸如“OK”、“我的意思是”、“Hm”之类的内容。这听起来像是你在自言自语,感到困惑。我不明白你的问题。您想要什么输出?您当前获得的输出是什么。不清楚问题是什么。我的理解是:您想知道如何只在两位数字之间打印
+
,而不是在最后一位之后。是吗?做得好。弗兰·萨-奥斯-我不知道谁批准了那些损坏的蜱虫,但它们并没有改善。“马丁博纳,我尝试删除C++标签时,我确实是做了,对不起。只是清理我自己的烂摊子。这个代码有点难理解,所以我没有注意正确的事情。不过,这些缓冲区非常小。@tadman可以通过用一个更大的数字替换“5”来增加缓冲区的大小;)撇开讽刺不谈,很有可能有人会输入超过5个字符的数字。为什么不呢?还是1024?或者某个人不太可能因为纯粹的意外而突然出现的东西?@tadman是的,这可能是合适的,但对于我提供的例子来说,这绝对不是必要的。另外,+1用于使用缓冲区大小的二次幂(尽管256是最合适的大小)。@tadman好的,很有趣。。还没有对数据库做很多工作。但是谢谢!
int currentLog10;
int powerOfTenForCurrentDigit;

...

while(a != 0)
{
  currentLog10 = (int)log10(a);

  powerOfTenForCurrentDigit = (int)pow(10, currentLog10);

  b = a/powerOfTenForCurrentDigit;
  a = a - b * powerOfTenForCurrentDigit;

  ...
}