当前位置: 代码迷 >> C语言 >> 关于ACM的题目,不会啊~~
  详细解决方案

关于ACM的题目,不会啊~~

热度:239   发布时间:2007-07-20 19:13:03.0

#include <stdio.h>
#include <curses.h>
#define MAX 100
#define MLEN 19
int old[20]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
char new[20]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j'};


int main()
{
char put[MAX];
char ch;
int i,j,count=0,count1=0;
int pnew1[MAX],pnew2[MAX];
char result[MAX+1];
int flag=0,sum=0;

printf("please input frist number:");
scanf("%s",&put);
for(i=0;i<MAX;i++)
{
if(put[i]=='\0')
break;

for(j=0;j<=MLEN;j++)
{
if(put[i]==new[j])
{
pnew1[i]=old[j];
break;
}
}

count++;
}

printf("please input second number:");
scanf("%s",&put);
for(i=0;i<MAX;i++)
{
if(put[i]=='\0')
break;

for(j=0;j<=MLEN;j++)
{
if(put[i]==new[j])
{
pnew2[i]=old[j];
break;
}
}

count1++;
}

if(count!= count1)
return 0;

for(i=count-1;i>=0;i--)
{
sum=pnew1[i]+pnew2[i]+flag;
result[i+1]=new[sum%(MLEN+1)];
flag=sum/(MLEN+1);
printf("result:%c\n",result[i+1]);

}

result[0]=new[flag];

for(i=0;i<count+1;i++)
printf("%c",result[i]);
printf("\n");

}


----------------解决方案--------------------------------------------------------
以前做过这个题,只要用数组读入后以二十进制相加就可以了,其实就是改一下高精度加法中的进位和转换
----------------解决方案--------------------------------------------------------
以下是引用卧龙孔明在2007-7-21 8:16:04的发言:
以前做过这个题,只要用数组读入后以二十进制相加就可以了,其实就是改一下高精度加法中的进位和转换

我看过了你写的那个了,也过不了ACM


----------------解决方案--------------------------------------------------------
以下是引用酒肉弥勒佛在2007-7-20 19:13:03的发言:

#include <stdio.h>
#include <curses.h>
#define MAX 100
#define MLEN 19
int old[20]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
char new[20]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j'};


int main()
{
char put[MAX];
char ch;
int i,j,count=0,count1=0;
int pnew1[MAX],pnew2[MAX];
char result[MAX+1];
int flag=0,sum=0;

printf("please input frist number:");
scanf("%s",&put);
for(i=0;i<MAX;i++)
{
if(put[i]=='\0')
break;

for(j=0;j<=MLEN;j++)
{
if(put[i]==new[j])
{
pnew1[i]=old[j];
break;
}
}

count++;
}

printf("please input second number:");
scanf("%s",&put);
for(i=0;i<MAX;i++)
{
if(put[i]=='\0')
break;

for(j=0;j<=MLEN;j++)
{
if(put[i]==new[j])
{
pnew2[i]=old[j];
break;
}
}

count1++;
}

if(count!= count1)
return 0;

for(i=count-1;i>=0;i--)
{
sum=pnew1[i]+pnew2[i]+flag;
result[i+1]=new[sum%(MLEN+1)];
flag=sum/(MLEN+1);
printf("result:%c\n",result[i+1]);

}

result[0]=new[flag];

for(i=0;i<count+1;i++)
printf("%c",result[i]);
printf("\n");

}

过不了.....
如果你们要测试,到这里http://acm.zju.edu.cn/submit.php?pid=1205


----------------解决方案--------------------------------------------------------
是不是那个进行测试的有问题?
----------------解决方案--------------------------------------------------------
我没有看你们写的,
我想起一种方法,不知道可不可以实现:
数字电路,要设计一个16进制的电路,
书上是将16进制转换为10进制实现的。
所以,这个是不是也考虑将20进制转化成10进制
我还找不出他们之间的联系,望高手考虑其可行性。

----------------解决方案--------------------------------------------------------
以下是引用zp_0409在2007-7-21 9:42:42的发言:
我没有看你们写的,
我想起一种方法,不知道可不可以实现:
数字电路,要设计一个16进制的电路,
书上是将16进制转换为10进制实现的。
所以,这个是不是也考虑将20进制转化成10进制
我还找不出他们之间的联系,望高手考虑其可行性。

我认为没有必要,因为同进制之间完全可以做四则运算,完全不需要转换后再计算


----------------解决方案--------------------------------------------------------
以下是引用卧龙孔明在2007-7-21 9:34:58的发言:
是不是那个进行测试的有问题?

好有嫌疑....


----------------解决方案--------------------------------------------------------

[CODE]
#include <stdio.h>
/*#include <curses.h>*/
#define MAX 100
#define MLEN 19
int old[20]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
char n[20]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j'};


int main()
{
char put[MAX];
char ch;
int i,j,count=0,count1=0;
int pnew1[MAX],pnew2[MAX];
char result[MAX+1];
int flag=0,sum=0;

printf("please input frist number:");
scanf("%s",&put);
for(i=0;i<MAX;i++)
{
if(put[i]=='\0')
break;

for(j=0;j<=MLEN;j++)
{
if(put[i]==n[j])
{
pnew1[i]=old[j];
break;
}
}

count++;
}

printf("please input second number:");
scanf("%s",&put);
for(i=0;i<MAX;i++)
{
if(put[i]=='\0')
break;

for(j=0;j<=MLEN;j++)
{
if(put[i]==n[j])
{
pnew2[i]=old[j];
break;
}
}

count1++;
}

if(count!= count1)
return 0;

for(i=count-1;i>=0;i--)
{
sum=pnew1[i]+pnew2[i]+flag;
result[i+1]=n[sum%(MLEN+1)];
flag=sum/(MLEN+1);
printf("result:%c\n",result[i+1]);

}

result[0]=n[flag];

for(i=1;i<count+1;i++)
printf("%c",result[i]);
printf("\n");
getch();
}




[/CODE]


----------------解决方案--------------------------------------------------------
看看是这样吗?
----------------解决方案--------------------------------------------------------
  相关解决方案