标题:关于ACM的题目,不会啊~~
只看楼主
酒肉弥勒佛
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:399
专家分:0
注 册:2006-6-6
得分: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-07-20 19:13
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
得分:0 
以前做过这个题,只要用数组读入后以二十进制相加就可以了,其实就是改一下高精度加法中的进位和转换

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-07-21 08:16
星星鱼虾蟹
Rank: 1
等 级:新手上路
帖 子:191
专家分:0
注 册:2007-6-2
得分:0 
以下是引用卧龙孔明在2007-7-21 8:16:04的发言:
以前做过这个题,只要用数组读入后以二十进制相加就可以了,其实就是改一下高精度加法中的进位和转换

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


2007-07-21 09:10
星星鱼虾蟹
Rank: 1
等 级:新手上路
帖 子:191
专家分:0
注 册:2007-6-2
得分:0 
以下是引用酒肉弥勒佛在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


2007-07-21 09:15
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
得分:0 
是不是那个进行测试的有问题?

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-07-21 09:34
zp_0409
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-6-4
得分:0 
我没有看你们写的,
我想起一种方法,不知道可不可以实现:
数字电路,要设计一个16进制的电路,
书上是将16进制转换为10进制实现的。
所以,这个是不是也考虑将20进制转化成10进制
我还找不出他们之间的联系,望高手考虑其可行性。
2007-07-21 09:42
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
得分:0 
以下是引用zp_0409在2007-7-21 9:42:42的发言:
我没有看你们写的,
我想起一种方法,不知道可不可以实现:
数字电路,要设计一个16进制的电路,
书上是将16进制转换为10进制实现的。
所以,这个是不是也考虑将20进制转化成10进制
我还找不出他们之间的联系,望高手考虑其可行性。

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


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-07-21 09:45
星星鱼虾蟹
Rank: 1
等 级:新手上路
帖 子:191
专家分:0
注 册:2007-6-2
得分:0 
以下是引用卧龙孔明在2007-7-21 9:34:58的发言:
是不是那个进行测试的有问题?

好有嫌疑....


2007-07-21 10:11
amyvmiwei
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-4-4
得分:0 

[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]

2007-07-21 13:36
amyvmiwei
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-4-4
得分:0 
看看是这样吗?
2007-07-21 13:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-156884-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.537741 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved