标签: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