题解 P1898 【缘分计算】
hmh13951417981 · · 题解
一道调了好久的水题
其实主要是被标题吸引的 虽然好像我还不太需要这种计算
本题主要要处理正序存储,本蒟蒻是用数组模拟的
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.