题目
3-5难度系数1 输出整数各位数字 (5 分)
本题要求编写程序,对输入的一个整数,从高位开始逐位分割并输出它的各位数字。
输入格式:
输入在一行中给出一个长整型范围内的非负整数。
输出格式:
从高位开始逐位输出该整数的各位数字,每个数字后面有一个空格。
输入样例:
123456
输出样例:
1 2 3 4 5 6
写了两种
(一)
#include <iostream>
using namespace std;
int leng(long a);
int main()
{
long x; cin >> x; int i = leng(x),z=leng(x);
int * num = new int[i]; if (x == 0)cout << "0 ";
while (x != 0) {
num[i]=x%10;i--;
x /= 10;
} for (int y = 1; y <= z; y++)
{
cout << num[y] << " ";
}
return 0;
}
int leng(long a) {
using namespace std;
int leng = 0;
while (a > 0) {
a /= 10;
leng++;
}
return leng;
}
测试点 提示 结果 耗时 内存
0 sample等价 运行时错误 3 ms 384KB
1 只有1位 答案正确 2 ms 420KB
2 零 答案正确 2 ms 404KB
(二)
#include <iostream>
using namespace std;
int main()
{
long n,x;
int num, temp;
cin>>n;
x = n;
int k = 1;
temp = 0;
while (x!=0)
{
temp++;
k *= 10;
x /= 10;
}
x = n;
if (n == 0)cout << "0 ";
while (temp!=0)
{ k /= 10;
num = x / k;
x %= k;
cout << num<<" ";
temp--;
}
return 0;
}
测试点 提示 结果 耗时 内存
0 sample等价 浮点错误 2 ms 512KB
1 只有1位 答案正确 2 ms 496KB
2 零 答案正确 2 ms 384KB
注意,是长整数范围,你输入6666666666
第一个程序没有输出
第二个程序输出-8 -5 -8 -9 -9 -3 -4 -6 0
你可以这么写:
#include <iostream>
using namespace std;
int main()
{
long x; cin >> x;
char temp[100];
ltoa(x, temp, 10);
for (int i = 0; i < strlen(temp); i++)
cout << temp[i] << " ";
return 0;
}
第一段代码:
如果i=5,通过“int * num = new int[i];”语句分配的int数组,你可以访问的下标是0~4,但是你在你在while和for循环中,
对数组的下标,分别会从5-1和1-5,这是不对的。
把第一段代码:
while (x != 0) {
num[i]=x%10;i--;
x /= 10;
}
for (int y = 1; y <= z; y++)
改成:
while (x != 0) {
num[i-1]=x%10;i--;
x /= 10;
}
for (int y = 0; y < z; y++)
应该就没问题了。