问题来源:PTA 拓展水仙花数题目中使用了pow&to_string函数后超时
具体题目:扩展水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次方之和等于它本身。例 如:153 =13+ 53+ 33。 要求编写程序,输出所有扩展水仙花数。
输入格式:
首先输入一个整数T(1<=T<10),表示测试组数;每组测试在一行上输入一个正整数N(3<=N<=7)。
输出格式:
对于每组测试,按递增顺序输出所有扩展水仙花数,每个数字占一行。
输入样例:
1
3
输出样例:
153
370
371
407
错误代码呈现
#include
using namespace std;
int main()
{
int t, n;
cin >> t;
int sum = 0;
while (t--)
{
cin >> n;
for (int i = pow(10, n - 1); i < pow(10, n); i++)
{
string s = to_string(i); //讲数字转换成字符串
for (int j = 0; j < s.size(); j++)
{
int k = s[j] - 48;
int tmp = pow(k,n);
sum += tmp;
}
if (sum == i)
cout << i << endl;
sum = 0;
}
}
return 0;
}
AC Code:
#include
using namespace std;
//自定义一个函数 实现pow
int mul(int a, int b)
{
int tmp = a;
for(int i=1; i> t;
int sum = 0;
while (t--)
{
cin >> n;
for (int i = mul(10,n-1); i < mul(10, n); i++)
{
//实现to_string的过程
int cnt=0;
w = i;
while(w!=0)
{
a[cnt++]=w%10;
w /= 10;
}
for(int j=0; j
其实把乘积函数在main函数中单独写出来,比单独写个函数再去调用可能效率更高(但我这种也过了hh)
在日后遇到卡时间复杂度的题,可以在pow和to_string上做优化处理
对于具体的pow和to_string实现暂时还没找到,如果有知道的并且愿意分享的万分感谢您
153 370 371 407错误代码呈现
#includeAC Code:using namespace std; int main() { int t, n; cin >> t; int sum = 0; while (t--) { cin >> n; for (int i = pow(10, n - 1); i < pow(10, n); i++) { string s = to_string(i); //讲数字转换成字符串 for (int j = 0; j < s.size(); j++) { int k = s[j] - 48; int tmp = pow(k,n); sum += tmp; } if (sum == i) cout << i << endl; sum = 0; } } return 0; }
#includeusing namespace std; //自定义一个函数 实现pow int mul(int a, int b) { int tmp = a; for(int i=1; i> t; int sum = 0; while (t--) { cin >> n; for (int i = mul(10,n-1); i < mul(10, n); i++) { //实现to_string的过程 int cnt=0; w = i; while(w!=0) { a[cnt++]=w%10; w /= 10; } for(int j=0; j 其实把乘积函数在main函数中单独写出来,比单独写个函数再去调用可能效率更高(
但我这种也过了hh)在日后遇到卡时间复杂度的题,可以在pow和to_string上做优化处理
对于具体的pow和to_string实现暂时还没找到,如果有知道的并且愿意分享的万分感谢您



