输入一个整数(可以是正数,负数或者0),要求:(1)求出它是几位数;(2)分别输出每一位数字.例如123,输出123;(3)按逆序输出各位数字,例如原数为321,应输出123。
对于第一问:想要知道该整数有几位,只需将其不断对10取余:
int i;
long long y1 = x;
for (i = 0; y1 != 0; i++)
{
y1 /= 10;
}
printf("该数字是%lld位数\n", i);
取余的次数就是该整数的位数。
对于第二问:想要正序输出各位数字,即从第一位开始分别输出每位数字,可先求出整数的首位,再将其去掉,以此往复,得到所以首位并将其输出。具体方法为:将整数分别对10的n次冥整除和取余(n为整数的位数),整除得到首位,取余则去掉首位。将得到首位数字依次输出,即可得到正序输出。若输入整数为负数,在前方加上“-”即可。
long long y2 = x;
if (x == 0)
{
printf("分别输出各位数字为%lld\n", x);
}
else if(x < 0)
{
printf("分别输出各位数字为-");
}
else
{
printf("分别输出各位数字为");
}
for (int j = i-1; j >= 0; j--)
{
long long n = y2 / pow(10, j );
long long m = pow(10, j);
y2 %= m;
printf("%lld", abs(n));
}
printf(" \n");
对于第三问:想要逆序输出,也即个位开始分别输出每位数字,可先求出将该整数的末位,再将其去掉,以此往复,得到所有末位并将其输出。具体方法为:先将整数对10取余,得到末位数字,再对其除10,丢掉末位数字,不断进行这个操作,并将得到的末位数字依次输出,即可得到逆序输出。若输入整数为负数,在前方加上“-”即可。
long long y3 = x;
if (x == 0)
{
printf("逆序为%lld\n",x);
}
else if (x < 0)
{
printf("逆序为-");
}
else
{
printf("逆序为");
}
for (int j = 1; j <= i; j++)
{
long long n = y3 % 10;
y3 /= 10;
printf("%lld", abs (n));
}
printf(" ");
完整代码
int main()
{
long long x;
printf("请输入一个整数:");
scanf("%lld", &x);
int i;
long long y1 = x;
for (i = 0; y1 != 0; i++)
{
y1 /= 10;
}
printf("该数字是%lld位数\n", i);
long long y2 = x;
if (x == 0)
{
printf("分别输出各位数字为%lld\n", x);
}
else if(x < 0)
{
printf("分别输出各位数字为-");
}
else
{
printf("分别输出各位数字为");
}
for (int j = i-1; j >= 0; j--)
{
long long n = y2 / pow(10, j );
long long m = pow(10, j);
y2 %= m;
printf("%lld", abs(n));
}
printf(" \n");
long long y3 = x;
if (x == 0)
{
printf("逆序为%lld\n",x);
}
else if (x < 0)
{
printf("逆序为-");
}
else
{
printf("逆序为");
}
for (int j = 1; j <= i; j++)
{
long long n = y3 % 10;
y3 /= 10;
printf("%lld", abs (n));
}
printf(" ");
return 0;
}