zoukankan      html  css  js  c++  java
  • 大数想减

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int len1,len2;
    int c[111];
    int my_compare(int *a,int *b)
    {
    	int flag;int i;
    	int max=(len1>=len2?len1:len2);
    	/*
        实际上还可以先判断长度,若长度不同,则必然一大一小
        长度相同时才用到下面的for循环
        */ 
        /*
        if(len1>len2)
            return 1;
        if(len1<len2)
            return -1;
           这样输入00 1的话,就会错误 
        */
        //else
        {
        	for(i=max;i>=1;i--)//因为ab是倒着存储的,a[0]、b[0]未使用 
        		if(a[i]>b[i])
        			{
        				flag=1;
        				break;
        			}
        		else if(a[i]<b[i])
        			{
        				flag=-1;
        				break;
        			}
        		else
        		    continue;
        }
    	if(0==i)
    		flag=0;
    	return flag;	
    }
    void plus(int a[],int b[])
    { 
    	int i;
    	int len=(len1>=len2?len1:len2); 
    	memset(c,0,sizeof(c));
    	for(i=1;i<=len;i++) 
    	{
    		c[i]=a[i]+b[i]; 
    		if(c[i]>=10) 
    		{ 
    			 c[i+1]++; 
    			 c[i]=c[i]%10;
    		} 
    	} 
    	if(c[len+1]!=0)
    		len++;
    	for(i=len;i>=1;i--)
    		printf("%d",c[i]);
    	printf("\n");
    }
    void minus(int a[],int b[])//数组a的值大于数组b的 
    { 
    	int i;
    	int len=(len1>=len2?len1:len2); 
    	memset(c,0,sizeof(c));
    	for(i=1;i<=len;i++) 
    	{
    		c[i]=a[i]-b[i]; 
    		if(c[i]<0) 
    		{ 
    			 a[i+1]--;
    			 /*
    			 if(a[i+1]<0)
    			     {
                            a[i+1]+=10;
                            a[i+2]--;
                    }
                    */
    			c[i]=c[i]+10;
    		} 
    	} 
    	while(c[len]==0)
    		len--;
    	for(i=len;i>=1;i--)
    		printf("%d",c[i]);
    	printf("\n");
    }
    int main()
    {
    	int i,j;
        int signal1,signal2;
    	char str1[110],str2[110];
    	int a[110],b[110];
    	while(~scanf("%s %s",str1,str2))
    	{
                len1=len2=0;
    			memset(a,0,sizeof(a));
    			memset(b,0,sizeof(b));
    			len1=strlen(str1);
    			len2=strlen(str2);
    			if(str1[0]=='-')
    			{
    				signal1=1;//1表示负数
    				len1--;	
    				for(i=1;i<=len1;i++)
                    	a[len1-i+1]=str1[i]-'0';
    			}
    			else
    			{
    				signal1=0;
    				for(i=1;i<=len1;i++)
                    	a[len1-i+1]=str1[i-1]-'0';
    			}
    			if(str2[0]=='-')
    			{
    				signal2=1;
    				len2--;
    				for(i=1;i<=len2;i++)
                    	b[len2-i+1]=str2[i]-'0';	
    			}
    			else
    			{
    				signal2=0;
    				for(i=1;i<=len2;i++)
                    	b[len2-i+1]=str2[i-1]-'0';	
    			}	
    			//主体 
    			if(signal1==0&&signal2==0)
    				if(my_compare(a,b)>0)//a-b
    					minus(a,b);
    				else if(my_compare(a,b)<0)//b-a
    				{	
    					putchar('-');
    					minus(b,a);
    				}
    				else 
    					printf("0\n");
    			else if(signal1==0&&signal2==1)//a+b
    				plus(a,b);
    			else if(signal1==1&&signal2==0)
    			{
    				putchar('-');
    				plus(a,b);
    			}
    			else//b-a
    			{
    				if(my_compare(a,b)<0)
    					minus(b,a);
    				else if(my_compare(a,b)>0)//b-a
    				{	
    					putchar('-');
    					minus(a,b);
    				}
    				else 
    					printf("0\n");
    			}
            }
    			//system("pause");
    	return 0;
    	 
    	 
    
  • 相关阅读:
    【青橙商城-管理后台开发】2. 商品服务模块搭建
    【青橙商城-管理后台开发】1.公共模块搭建
    Oracle对象-视图和索引
    Oracle的查询-分页查询
    Oracle的查询-子查询
    Oracle的查询-自连接概念和联系
    Oracle的查询-多表查询中的一些概念
    Oracle的查询-分组查询
    Oracle的查询-多行查询
    dotnet 开源库
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2608672.html
Copyright © 2011-2022 走看看