1764: 【基础】处理数
时间限制: 1 Sec 内存限制: 32 MB
提交: 1054 解决: 796
[提交] [状态] [讨论版] [命题人:外部导入]
题目描述
给出一个正整数n,然后对n进行一系列处理,处理用以下代码表示:
0 不做任何处理
1 对原数加上100, 若加上100后大于1000,则再减去1000.
2 对原数减去100, 若减去100后小于0,则再加上200
3 对原数除2取整
4 对原数乘4,若乘4之后大于1000,则除以1000取余数。
问 题:输入n,k后,将 n作为原数(1≤ n < 1000), k为处理码的十进制表示(1<k≤30000)。要求将k化为五进制的数,然后以该五进制数从高位到低位的顺序,分别将每位数字作为处理码对原数按上述规则进行处理,求处理后的结果。
输入
n k (2个整数)
输出
处理后的结果
样例输入
33 247
样例输出
28
提示
样例说明: k=247 化为五进制数:1442, 则处理系列为: 1 33+100=133 4 133*4=532 4 532*4=2128 (除以1000取余数,成为128) 2 128-100=28 所以输出28
来源/分类
2009年江苏省小学生信息学(计算机)奥赛
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int n,k;
scanf("%d%d",&n,&k);
char ar[99999];
if(k==0)
{
ar[0]='0';
}
else
{
for(int i=0; ;i++)
{
if(k/5!=0)
{
ar[i]=k%5+'0';
k/=5;
}
else
{
ar[i]=k+'0';
break;
}
}
int LEN_ar=(int)strlen(ar)
for(int i=LEN_ar-1;i>=0;i--)
{
if(ar[i]=='1')
{
if(n+100>1000)
{
n+=100;
n-=1000;
}
else
{
n+=100;
}
}
else if(ar[i]=='2')
{
if(n<100)
{
n+=100;
}
else
{
n-=100;
}
}
else if(ar[i]=='3')
{
n/=2;
}
else if(ar[i]=='4')
{
if(n*4>1000)
{
n*=4;
n%=1000;
}
else
{
n*=4;
}
}
}
}
printf("%d",n);
return 0;
}