NYOJ-73 比大小 AC 分类: NYOJ 2014-01-17 21:29 195人阅读 评论(0) 收藏


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


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


#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
");
			}
			else if(len1<len2){
				printf("a>b
");
			}
			else if(len1==len2){
				if(pd(int1,int2)>0){
					printf("a<b
");
				}
				else if(pd(int1,int2)<0){
					printf("a>b
");
				}
				else{
					printf("a==b
");
				}
			}
		}
		else if((int1[0]!='-')&&(int2[0]!='-')){
			if(len1>len2){
				printf("a>b
");
			}
			else if(len1<len2){
				printf("a<b
");
			}
			else if(len1==len2){
				if(pd(int1,int2)>0){
					printf("a>b
");
				}
				else if(pd(int1,int2)<0){
					printf("a<b
");
				}
				else{
					printf("a==b
");
				}
			}
		}
		else{
			if(int1[0]!='-')printf("a>b
");
			else printf("a<b
");
		}
	}
	return 0;
}

int pd(char s1[],char s2[]){
	int i=0;
	while(++i){
		if(s1[i-1]=='')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


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


版权声明:本文为博主原创文章,未经博主允许不得转载。

本文为博主原创文章,未经博主允许不得转载。
原文地址:https://www.cnblogs.com/you-well-day-fine/p/4671674.html