刚开始学c++,
做到这一题时发现超时了。
自己测试的时候运行很长一段时间,
最后还是没有出答案。
看了很久没看出原因,
百度上也没有找到,
请问各位能帮我看一下我的c++代码为什么超时了吗?
题:
给定一个 整数n,输出这个数的位数和数位累加和。
输入格式
一个整数。
输出格式
第一行一个整数表示其位数 第二行一个整数表示其各个数位累加和。
代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n,a[10],digit,answer[11],endanswer=0;
cin>>n;
a[1]=10;
for(int i=1;n/a[i]!=0;){
for(answer[i]=n%a[i];answer[i]>=10;){
answer[i]/=10;
}
endanswer+=answer[i];
i++;
a[i]*=10;
digit=i;
}
for(answer[10]=n/10;answer[10]>=10;){
answer[10]=n/10;
}
endanswer+=answer[10];
cout<<digit<<endl<<endanswer;
return 0;
}
题主考虑的太复杂了,修改如下,供参考:
#include<iostream>
//#include <bits/stdc++.h>
using namespace std;
int main() {
int n,a[10],digit=0,answer[11],endanswer=0;
cin>>n;
while(n){
endanswer += n%10;
digit++;
n /= 10;
}
//a[1]=10;
//for(int i=1;n/a[i]!=0;){
// for(answer[i]=n%a[i];answer[i]>=10;){
// answer[i]/=10;
// }
// endanswer+=answer[i];
// i++;
// a[i]*=10;
// digit=i;
//}
//for(answer[10]=n/10;answer[10]>=10;){
// answer[10]=n/10;
//}
//endanswer+=answer[10];
cout<<digit<<endl<<endanswer;
return 0;
}
注意第7行,n/a[i]
会因为除数为0产生异常,因为你第13行没啥用,a没进行初始化,所以a中的值都是编译器自己默认的,有可能是0,也有可能是随机的数字