可以写一下这个程序吗》或者告诉我思路也行,谢谢。
输入一个整数,你的任务是计算并输出这个整数的反数。反数的定义如下:1.结尾非0的正整数的反数就是一般的取反概念:12的反数为21
2.负数的反数仍是负数:-12的反数为-21
3.结尾为0的正整数的反数为:1200的反数为2100
我不清楚输入的数究竟有几位,然后怎么变化它们呢,以前知道输入的是几位数,可以用%或/1000什么的来变换,现在怎办呢?
#include<stdio.h> int main() { char c=' ';//对字符c初始化 int a[50],i=0,j,t,t1,t2,u;//声明下列要用到的变量 t=t1=t2=u=0;//t t1 t2 u都为状态变量,统一赋初值为0 while (c!='\n') { if (!i)c=getchar();//当第一个字符第时的位置 a[i]=c-48;//字符的ASCII码与数字的值相差48 if (!a[i])//当输入数字0时 { !t2;//t2为记录字符中间的有没有0位 t++; } //记录末尾为0位的个数 else t=0; if (i)c=getchar();//第二个字符之后输入的位置,目的是避免换行符对执行运算的干扰 i++; } if (t)t2=0;//如果末尾数字为0则下面将要执行t2条件就不成立 t1=t;//把末尾0位的个数赋值给t1,t1的作用是记录末尾数字0的个数 if (!a[0])//数字首位不能为0 { printf("数字首位不能为0\n"); return 0; } if (a[0]<0)printf("-");//当输入负数时要打印负号 for (j=i-2;j>0;j--) { if (t>1)//当执行循环对应的运算字符末尾数字为0时 { t--; continue;//跳过循环,等于暂时对末尾数字0的情况不作处理 } if (a[j+1]||u)//当末尾数字不为0时且状态变量u不为0时 printf("%d",a[j+1]); if (t==1&&t2)printf("0");/*状态变量t2作用就在这里补0 (虽然本人也不完全明白其中逻辑关系,但经测试是要加的)*/ else { if (!a[i+1])//如果末尾数字为0 printf("0");//输出末尾的数字0(虽然本人也不完全明白其中逻辑关系,但经测试是要加的) u=1;//u=1时意思是最多只有一次不执行上方的条件 } } if (a[0]>0)printf("%d",a[0]); for (t=t1;t>0;t--) printf("0");//输出末尾数字为0的个数 printf("\n"); }//最后,这个程序还有一个小问题,也就是输入0时会……但这个漏洞很容易修改,就请多多原谅吧 //抱歉,本人也有考虑把运算部分在非主函数体里执行,但看上去整个程序的整体性较强,改写函数体比较麻烦,不便之处请多多原谅
[此贴子已经被作者于2016-10-27 00:19编辑过]