标签:acm算法
35 2 35 1 -1 -1
Case #1: Yes Case #2: No
题意:给定n和m,n代表一个数,m代表m次操作。每次操作都是加上各个位数的数,再加到n的尾部去。比如35 第一次操作358 第二次操作35816.
最后问的是这个数能否被11整除。
n的范围是1W,m的范围是10W,直接暴力的话显然不行,这个数实在是太大了。我们考虑用字符窜存储,,,能被11整除的数的规律是奇位数字的和减去偶位数字的和为11的倍数就行。然后我们模拟那个过程,最后for一遍字符数组就行。
#include <iostream> #include <algorithm> #include <stdio.h> #include <string.h> #include <math.h> #include <vector> #include <cstdlib> #include <map> #include <string> using namespace std; int main() { int t,i; char s[1000000]; int dd=0; while(~scanf("%s%d",&s,&t)) { if (s[0]=='-'&& t == -1) break; int l=strlen(s),sum=0; for(i=0; i<l; i++) { sum+=s[i]-'0'; } int cnt; while(t--) { int pp=sum; itoa(sum,s+l,10); cnt=0; while(pp) { sum+=pp%10; pp=pp/10; cnt++; } l+=cnt; } int ans=0; for(i=0; i<l; i++) { if(i&1) ans+=s[i]-'0'; else ans-=s[i]-'0'; } if(abs(ans)%11==0) printf("Case #%d: Yes\n",++dd); else printf("Case #%d: No\n",++dd); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:acm算法
原文地址:http://blog.csdn.net/sky_miange/article/details/47607531