1·我的最终代码
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main()
{ int n;
cin>>n;
int sum;
string s;
for(int j=pow(10,n-1);j<pow(10,n);j++)
{s=to_string(j);
sum=0;
for(int i=0;i<j.size();i++)
{int temp=s[i]-'0';
sum+=pow(temp,n);
}
if(sum==j)
{cout<<j<<endl;
}
}
return 0;
}
2·其实我开始想过两种方法
(1)不用string
因为用string(字符数组)就是因为它方便计算数字的位数(比如100为三位我只要shuzi.size(),就可以计算),但我也可以自己写一个函数单独计算位数,比如下面这个:
int len(int n)
{ int cnt=0;
do
{cnt++;
n/=10;
}while(n!=0);
return cnt;
}
那完整代码就改
1.for(int i=0;i<j.size();i++)-->for(int i=0;i<len(j);i++)
2.再把string字符数组部分改成整型数组就完成了
3·但我还是决定把string的方式开发出来感觉会更简洁
下面那个代码是我测试用的其实和上面一样的,打出来是为了告诉你们一个代码一次写正确是很难的,通常要多次测试(一行一行测试)才能“完美”
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
/*int len(int n)
{ int cnt=0;
do
{cnt++;
n/=10;
}while(n!=0);
return cnt;
}*/
int main()
{ int n;
cin>>n;
int sum;
//cout<<len(sum);
string s;
for(int j=pow(10,n-1);j<pow(10,n);j++)
{s=to_string(j);
sum=0;
for(int i=0;i<s.size();i++)//len(j);i++)
{int temp=s[i]-'0';
//cout<<temp<<endl;
sum+=pow(temp,n);//temp*temp*temp
}
if(sum==j)
{cout<<j<<endl;
}
}
return 0;
}//可以不用string直接加余数,但我想看看我现在怎么改可以对
4·这里我来讲一下用string的几个关键点
我先复制一下开始的代码!
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main()
{ int n;
cin>>n;
int sum;
string s;
for(int j=pow(10,n-1);j<pow(10,n);j++)
{s=to_string(j);
sum=0;
for(int i=0;i<j.size();i++)
{int temp=s[i]-'0';
sum+=pow(temp,n);
}
if(sum==j)
{cout<<j<<endl;
}
}
return 0;
}
(1)string为字符数组,本质储存的是ASCII 码
(
### **C++中ASCII码的全称**
**ASCII** 的全称是 **American Standard Code for Information Interchange**(美国信息交换标准代码)。
- 它是基于拉丁字母的一套电脑编码系统,用于表示文本信息,包含 **128个字符**(0-127),涵盖英文字母、数字、标点符号及控制字符。
- 在C++中,字符类型(如 `char`)本质上存储的就是ASCII码值,例如 `'A'` 的ASCII码为65,`'0'` 为48。
)
所以如果你想要输出string[0]中你原本储存的1,就要输出string[0]-'0';
(2)如果想把string转为long long可以用:stoll(string的变量名)
int 转为string 就用上面我写的:to_string(int的变量名)
感谢观看


被折叠的 条评论
为什么被折叠?



