洛谷 U6850 手机密码

题目背景

小明的手机上设了一个由四个数字组成的密码,但是小明自己的记性不好,但又不想把密码直接记在纸上,于是便想了一个方法。

题目描述

小明有四行数字,每行数字都有n[i](<=250)位,第i行的数字代表着小明密码的第i位,小明密码的转换的方法是这样的:将这个数各位上的数加起来,会得到一个新数,重复这个操作,直到这个新数小于10。

n[i]不在输入中

输入输出格式

输入格式:

 

共四行,每行一个数。

 

输出格式:

 

一个数,表示 小明的四位数密码。

 

输入输出样例

输入样例#1:
123456789
32563343
26334
26452634654
输出样例#1:
9292

说明

  • 数据说明
123456789=1+2+3+4+5+6+7+8+9=45=4+5=9
32563343=3+2+5+6+3+3+4+3=29=2+9=11=1+1=2
26334=2+6+3+3+4=18=1+8+9
26452634654=2+6+4+5+2+6+3+4+6+5+4=47=4+7=11=1+1=2

密码=9292

注:别想用int64(long long)骗分,真实数据里n[i]至少有一个会>20。

有2个数据里的n[4]<1。不知道洛谷会怎么评测

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[5][251];
long long num;
int ans[5];
int main(){
    for(int i=1;i<=4;i++)    cin>>s[i];
    for(int i=1;i<=4;i++){
        num=0;
        int len=strlen(s[i]);
        for(int j=0;j<len;j++)
            num+=s[i][j]-'0';
        while(num>9){
            long long x=num;num=0;
            while(x){
                num+=x%10;
                x/=10;
            }
        }
        ans[i]=num;
    }
    for(int i=1;i<=4;i++)
        cout<<ans[i];
}

 

posted @ 2017-09-03 20:49  一蓑烟雨任生平  阅读(179)  评论(0编辑  收藏  举报