题解 P1898 【缘分计算】

· · 题解

一道调了好久的水题

其实主要是被标题吸引的 虽然好像我还不太需要这种计算

本题主要要处理正序存储,本蒟蒻是用数组模拟的

    num=s[i]-'A'+st;//算出数
    w=10000,flag=0;//由于最大就10000,所以除数最大为10000
    while(w){
        if(num>=w) flag=1;//如果发现现在这个位置比除数大,就要开始录入了
        if(flag) a[++sum]=num/w;//分离数位
        num=num%w;
        w/=10;//向下一个数位进军
    }

然后就是纯模拟,后一位加到前一位

#include<bits/stdc++.h>
using namespace std;
string s;
int a[101],st,i,num,sum,w;
bool flag;
int main()
{   cin>>s>>st;//输入
    for(i=0;i<s.size();i++)
    {num=s[i]-'A'+st;//算出数
    w=10000,flag=0;
    while(w){
        if(num>=w) flag=1;
        if(flag) a[++sum]=num/w;
        num=num%w;
        w/=10; 
    }   }//正序存储
    while(sum>2){
        if(sum==3&&a[1]==1&&a[2]==0&&a[3]==0){
            cout<<100; return 0;
        }//特判(如果是100 直接输出)
        for(i=1;i<sum;i++)
        a[i]=(a[i]+a[i+1])%10;//和取个位
        sum--;            //位数减一
    }
    if(sum==1) cout<<a[1];//特判,如果只有一位就只输出一位
    else cout<<a[1]*10+a[2];//否则输出正常的数(这里这样写可以去前导0)
    return 0;
}

最后百无聊赖的我测了几组和基友的数据

输入:HMHYY 520 输出:75

输入:HMHZYX 520 输出:97

输入:HMHLSH 520 输出:77

可以通过这道题测一测“缘分”,但是

Don't be sad if the result of you and your sweetie is not 100. That's no big deal.