NYOJ-73 比大小 AC

来源:互联网 发布:手机号提取软件 编辑:程序博客网 时间:2024/05/29 18:45


典型的大数题目,这只是大数的比较,到时还有大数加减乘除,更加还有乘方,对于大数,一般用数组或者字符串,因为其他的结构类型一般都没有那么大 的范围!!


这道题目需要你仔细回想怎么比较俩个数字的大小,考虑各种情况。例如:符号的不同,位数的不同等,


#include<stdio.h>#include<string.h>int pd(char s1[],char s2[]);int main(){char int1[1100];char int2[1100];int len1,len2;while(scanf("%s",int1)!=EOF){scanf("%s",int2);len1=strlen(int1);len2=strlen(int2);if((strcmp(int1,"0")==0)&&(strcmp(int2,"0")==0))break;if((int1[0]=='-')&&(int2[0]=='-')){if(len1>len2){printf("a<b\n");}else if(len1<len2){printf("a>b\n");}else if(len1==len2){if(pd(int1,int2)>0){printf("a<b\n");}else if(pd(int1,int2)<0){printf("a>b\n");}else{printf("a==b\n");}}}else if((int1[0]!='-')&&(int2[0]!='-')){if(len1>len2){printf("a>b\n");}else if(len1<len2){printf("a<b\n");}else if(len1==len2){if(pd(int1,int2)>0){printf("a>b\n");}else if(pd(int1,int2)<0){printf("a<b\n");}else{printf("a==b\n");}}}else{if(int1[0]!='-')printf("a>b\n");else printf("a<b\n");}}return 0;}int pd(char s1[],char s2[]){int i=0;while(++i){if(s1[i-1]=='\0')break;if(s1[i-1]!=s2[i-1]){if(s1[i-1]>s2[i-1])return 1;else if(s1[i-1]<s2[i-1]) return -1;else if(s1[i-1]==s2[i-1]) continue;}}return 0;}


如果这题目做出了了,就可以去看看第28题目 大数阶乘http://acm.nyist.net/JudgeOnline/problem.php?pid=28


这是真正用到大数运算的经典题目,也不难,只需要回想起小学时的乘法竖式,


0 0
原创粉丝点击