sicily 1295. 负权数

//具体求解过程请参照郭老的ppt
#include<iostream>
#include
<cstring>
#include
<cstdlib> //abs函数头文件
using namespace std;
int n,r,an,ar;
int arr[100],len;
int main()
{
while(cin>>n) //在网上看到还能这么处理输入,好东西啊,之前因为无法用while(cin>>n>>r),所以傻乎乎地用getline(cin,str),再对str分拆成两个数来,之后还要判断n的正负,实在是麻烦...
{
if((cin>>r)==0)
break;
if(n==0)
{
cout
<<"0\n";
continue;
}
an
=abs(n);ar=abs(r);
memset(arr,
0,sizeof(arr));
len
=0;
while(an)
{
arr[len
++]=an%ar;
an
/=ar;
}
for(int i=0;i<len;++i)
{
if(arr[i]>=ar)
{
arr[i
+1]++;
arr[i]
-=ar;
}
if(arr[i]>0&&((n>0&&i%2)||(n<0&&!(i%2)))) //之前写成 n<0&&!i%2 老是错, 原来 !优先级比 % 要高
{
arr[i
+1]++;
arr[i]
=ar-arr[i];
}
if(i==len-1&&arr[len]>0)
len
++;
}
for(int i=len-1;i>=0;--i)
if(arr[i]<10)
cout
<<arr[i];
else
cout
<<char(arr[i]+55);
cout
<<endl;
}
return 0;
}

posted on 2011-07-05 02:14  sysu_mjc  阅读(256)  评论(0编辑  收藏  举报

导航