题目描述
对于给定的正整数 n,计算其十进制形式下所有位置数字之和,并计算其平方的各位数字之和。
输入描述:
每行输入数据包括一个正整数n(0<n<40000)
输出描述:
对于每个输入数据,计算其各位数字之和,以及其平方值的数字之和,输出在一行中,之间用一个空格分隔,但行末不要有空格。
输入
复制
4
12
97
39999
输出
4 7
3 9
16 22
39 36
经验总结
- 这道题AC代码1可以用函数的方法来简化代码,AC代码2就是有点离谱了;
- 把字符串变成小写;
for (int j=0;j< school.length()i j++)
school[j]=tolower( school[j])
getline(cin,s) | 输入一行字符串,可以包含空格 |
---|---|
to_ string(int n) | int类型转换成字符串,可带负号 |
stoi(string s) | 字符串转换成int类型 |
atoi(string s) | 符串转换成int类型 |
atof(string s) | 字符串转换成foat类型 |
s[i]-0′ | 将单个字符转换成数字 |
s. substr(开始下标,长度) | 取字符串S的子串 |
- 如果字符串中有空格的话,用 getline接收一行的输入。 getline(cin,s)
- scanf的几个小特点
在scanf中,除了char数组整个输入的情况下不加&外,其他变量类型都需要加&。
输入两个用空格隔开的数字,两个%d之间可以不加空格,因为除了%c外,scanf对其他格式符(如%d)的输入是以空白符为结束判断标志的;
AC代码1
#include <iostream>
#include <string>
using namespace std;
int main() {
int c;
cin >> c;
string str1 = to_string(c);
string str2 = to_string(c*c);
int sum1 = 0,sum2 = 0;
for (int i = 0; i < str1.size(); i++){
sum1 += (str1[i] - '0');
}
for (int j = 0; j < str2.size(); j++){
sum2 += (str2[j] - '0');
}
cout << sum1 << " " << sum2;
return 0;
}
AC代码2
#include <algorithm>
#include <iostream>
#include <math.h>
using namespace std;
int n;
void num1(int &i){
int sum=0,t;
t=n;
while(t!=0){
sum +=(t%10);
t/=10;
}
i=sum;
}
void num2(int &j){
int sum=0,t;
t=j;
while(t!=0){
sum +=(t%10);
t/=10;
}
j=sum;
}
int main(){
int i=0,j=0;
cin>>n;
i=n;
num1(i);
j=pow(n,2);
num2(j);
cout<<i<<" "<<j<<endl;
return 0;
}