问题 C: 神奇的数字9
时间限制: 1 Sec 内存限制: 128 MB题目描述
给定一个数N(没有前导0)和Q次操作,每次操作修改第i位数字 为 v(保证不会把第一位修改为0),对每次操作判定新数能否被9整除。
若满足被9整除输出1,反之输出0。
输入
有多组测试数据,请处理到文件结束。
每组数据有两个整数N和Q,接下来有Q行代表Q次操作,每行有两个整数i和v。
后台数据保证0 <= N <= 10^1000000,1 <= Q <= 10^6,1 <= i <= |N|,0 <= v <= 9。
输出
每组数据输出Q行,代表对Q次操作后的判定。
样例输入
999 3
2 0
3 0
2 9
10000000000000000000000000000000000000000000000 1
2 8
10000000000000000000000000000000000000000000000 4
2 9
3 8
4 9
5 9
样例输出
1
1
1
1
0
1
1
1
思路 : 数学知识 目前已知的就是9 和3 这两个数字,,只要是能够整除他们的数字,那么其各个位之和也是可以整除的3或者9
代码:
#include<string.h> #include<stdio.h> #include<algorithm> #include<math.h> #include<queue> #include<stack> #define inf 0x3f3f3f #define M 10000000+3 using namespace std; char str[M]; int main() { int n,q; while(~scanf("%s%d",str,&q)) { int len=strlen(str); int sum=0; for(int i=0;i<len;i++) sum+=str[i]-'0'; // 获取 本来的值 for(int i=0;i<q;i++) { int k,v; scanf("%d%d",&k,&v); sum=sum-str[k-1]+'0'; sum+=v; str[k-1]=v+'0'; // 更新这个字符 printf("%d\n",sum%9==0?1:0); } } return 0; }