zoukankan      html  css  js  c++  java
  • 刘子闻讲的高精度【太强了】

    刘子闻(神!)讲的高精度【太强了】

    1.6 10:大整数加法

    总时间限制: 1000ms 内存限制: 65536kB
    

    描述

    求两个不超过200位的非负整数的和。

    输入

    有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。

    输出

    一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

    样例输入

    22222222222222222222
    33333333333333333333

    样例输出

    55555555555555555555

    #include<cstdio>
    #include<cstring>
    using namespace std;
    int main()
    {
    	char a[205]={0},b[205]={0};
    	int d[205]={0},f[205]={0},e[205]={0},c,l=0;
    	int l1,l2;
    	gets(a);
    	gets(b);
    	l1=strlen(a);
    	l2=strlen(b);
    	for(c=0;c<l1;c++)
    	{
    		d[205-l1+c]=a[c]-'0';
    	} 
    	for(c=0;c<l2;c++)
    	{
    		f[205-l2+c]=b[c]-'0';
    	}
    	c=205;
    	while(c--)
    	{
    		e[c]+=d[c]+f[c];
    		if(e[c]>=10)
    		{
    			e[c-1]++;
    			e[c]=e[c]%10;
    		}
    	}
    	for(c=0;c<205;c++)
    	{
    		if(e[c]!=0) 
    		break;
    	}
    	for( c;c<205;c++)
    	l+=printf("%d",e[c]);
    	if(l==0) 
    	printf("0");
    	return 0;
    }
    
    • 看好了哈,主程序第一行和第二行那些数组,如果你在开的小一点,你就会得到(等会儿,我看一下)额。。。九分的好成绩!!!

    1.6 11:大整数减法

    总时间限制: 1000ms 内存限制: 65536kB
    

    描述

    求两个大的正整数相减的差。

    输入

    共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。

    输出

    一行,即所求的差。

    样例输入

    9999999999999999999999999999999999999
    9999999999999

    样例输出

    9999999999999999999999990000000000000

    #include<cstdio>
    #include<cstring>
    #define m 220
    int x[m],y[m];
    char b[m],c[m];
    int i,s,r,t,z; 
    int main() 
    {
    	scanf("%s%s",b,c);
    	s=strlen(b);
    	r=strlen(c);
    	if(s>r) t=s;
    	else t=r;
    	for(int i=0;i<s;i++) x[i]=b[s-i-1]-'0';
    	for(int i=0;i<r;i++) y[i]=c[r-i-1]-'0';
    	for(int i=0;i<t;i++)
    	{
    		x[i]-=y[i];
    		if(x[i]<0)
    		{
    			x[i+1]--;
    			x[i]+=10;
    		}
    	}
    	int z=t;
    	while(x[z]==0&&z!=0)
    	{
    		z--;
    	}
    	for(int i=z;i>=0;i--)
    	{
    		printf("%d",x[i]);
    	}
    	return 0;
    }
    
    • 这次我好像注意数组了,然鹅。。。逻辑上有些失误,运算过程中出现了一点差错。嗯。没了(听取WA声一片)

    1.13 09:大整数乘法

    总时间限制: 1000ms 内存限制: 65536kB
    

    描述

    求两个不超过200位的非负整数的积。

    输入

    有两行,每行是一个不超过200位的非负整数,没有多余的前导0。

    输出

    一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

    样例输入

    12345678900
    98765432100

    样例输出

    1219326311126352690000

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #define m 500
    using namespace std;
    int x[m],y[m], z[m];
    char b[m],c[m];
    int main() 
    {
    	int len1, len2, len3;
    	scanf("%s%s", b, c);
    	len1=strlen(b);	
    	len2=strlen(c);
    	for(int i=0; i<len1; i++)
    		x[i] = b[len1-1-i]-'0';
    	for(int i=0; i<len2; i++)
    		y[i] = c[len2-1-i]-'0';
    	for(int i=0; i<len1; i++)
    	{
    		for(int j=0; j<len2; j++)
    		z[i+j]+=x[i]*y[j];
    		len3 = len1+len2;
    	}	
    	for(int i=0; i<=len3; i++)
    	{
    		if(z[i]>=10)
    		{
    			z[i+1]+=z[i]/10;
    			z[i]%=10;
    		}
    	}
    	while(z[len3-1]==0 && len3>1) len3--;
    	for(int i=len3-1; i>=0; i--)
    	{
    		printf("%d", z[i]);
    	}
    	return 0;
    }
    
    • 乘法就和加法减法不太一样了
      • 最大到(i+j),最小是(i+j-1)
      • 再就是进位不同,加法最多只进1,而乘法呢/手动滑稽/

    除法。。。让我再想想吧(我太菜了)

  • 相关阅读:
    select选择框去掉默认的下拉箭头
    网站怎么添加ico小图标
    js实现逐字打印效果,文本逐字显示
    jQuery实现消息列表循环垂直向上滚动
    滤镜图片变黑白+图片模糊
    多选下拉框(select 下拉多选)
    JavaScript 数组相关基础方法
    h5+ IOS App中判断本地文件是否存在 plus.io.resolveLocalFileSystemURL()
    h5+ IOS App中取消视频默认全屏播放
    C# 多线程与队列操作小练刀
  • 原文地址:https://www.cnblogs.com/orange-233/p/12018894.html
Copyright © 2011-2022 走看看