牛客网 数字之和 两种方法 可以用字符串

题目描述

对于给定的正整数 n,计算其十进制形式下所有位置数字之和,并计算其平方的各位数字之和。

输入描述:

每行输入数据包括一个正整数n(0<n<40000)

输出描述:

对于每个输入数据,计算其各位数字之和,以及其平方值的数字之和,输出在一行中,之间用一个空格分隔,但行末不要有空格。

输入

复制
4
12
97
39999

输出

4 7
3 9
16 22
39 36

经验总结

  1. 这道题AC代码1可以用函数的方法来简化代码,AC代码2就是有点离谱了;
  2. 把字符串变成小写;
forint 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的子串
  1. 如果字符串中有空格的话,用 getline接收一行的输入。 getline(cin,s)
  2. 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值