杭电 1230 火星a+b 【大数】【进制转换】
来源:互联网 发布:linux kill -9用法 编辑:程序博客网 时间:2024/04/26 14:08
<pre name="code" class="objc">#include<stdio.h>//自己打的#include<math.h>#include<string.h>int ss(int n)//学长加的打表= ={ int i; for(i=2;i<=sqrt(n);i++){ if(n%i==0) return 0; } return 1;}int main(){ int a[105],b[105],c[105],num1,num2,i,l1,l2; char str1[1000],str2[1000]; //int f[20]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71}; int f[1000]; int z=0; for(i=2;i<1000;i++) {//学长加的打表= = if(ss(i)==1) f[z++]=i; } while(EOF!=scanf("%s%s",str1,str2)&&(strcmp(str1,"0")!=0&&strcmp(str2,"0")!=0)) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); num1=0;num2=0; l1=strlen(str1);l2=strlen(str2); for(i=0;i<l1;i++) { if(str1[i]>='0'&&str1[i]<='9') { a[num1]*=10; a[num1]+=str1[i]-'0'; } else num1++; } for(i=num1;i>=0;i--) c[i]=a[num1-i]; for(i=0;i<l2;i++) { if(str2[i]>='0'&&str2[i]<='9') { b[num2]*=10; b[num2]+=str2[i]-'0'; } else if(str2[i]==',') num2++; } for(i=num2;i>=0;i--) c[i]+=b[num2-i]; num1=num1>num2?num1:num2; for(i=0;i<=num1;i++) { if(c[i]>=f[i]) { c[i]=c[i]%f[i]; c[i+1]+=1; } } if(c[num1+1]!=0) num1++; for(i=num1;i>=0;i--) { printf("%d",c[i]); if(i) printf(","); } printf("\n"); } return 0;}
<pre name="code" class="objc"><pre name="code" class="objc">#include<stdio.h> //使用输入输出函数 #include<string.h> //使用字符串函数 int prim[50]; //存储素数列表 int p[250]; //用于筛选素数处理 void makeprime() //筛选法求素数 { int i,j; memset(p,0,sizeof(p)); //初始化数组 for(i=2;i<125;i++) //筛选法求素数 for(j=i+i;j<250;j+=i) p[j]=1; for(i=2,j=0;i<250&&j<50;i++) //形成素数列表 if(!p[i]) prim[j++]=i; } int main() { char x[1000],y[1000],*p; //输入数组,存储原始数据、指针 int a[50],b[50],t; //处理数组,中间变量 int len,lena,lenb;//记录长度 int i,j; //循环变量 makeprime();//产生素数数组 while(scanf("%s%s",x,y)&&x[0]!='0'||y[0]!='0') //初始化 { //初始化处理数组 memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); //处理第一个“火星数” lena=0; p=x; while(strstr(p,","))//提取数字 { sscanf(p,"%d",&a[lena++]); p=strstr(p,",")+1; } sscanf(p,"%d",&a[lena]); for(j=0;j<=lena/2;j++)//数字逆序处理[低位放前面,高位放后面,利于进位处理] { t=a[j]; a[j]=a[lena-j]; a[lena-j]=t; } //同上 lenb=0; p=y; while(strstr(p,",")) { sscanf(p,"%d",&b[lenb++]); p=strstr(p,",")+1; } sscanf(p,"%d",&b[lenb]); for(j=0;j<=lenb/2;j++) { t=b[j]; b[j]=b[lenb-j]; b[lenb-j]=t; } //检测输出 /*printf("---------a---------\n"); for(i=0;i<=lena;i++)printf("%d ",a[i]); printf("\n\n"); printf("---------b---------\n"); for(i=0;i<=lenb;i++)printf("%d ",b[i]); printf("\n\n");*/ //加法处理,进位处理 len=lena>lenb?lena:lenb;//提取最大长度 for(i=0;i<=len;i++) { a[i]+=b[i]; //加法处理 if(a[i]>=prim[i]) //进位处理 a[i+1]+=a[i]/prim[i],a[i]=a[i]%prim[i]; } if(a[i]>=prim[i]) //假设最高位需要进位 a[i+1]+=a[i]/prim[i],a[i]=a[i]%prim[i]; if(a[i])len++; //若最高位进位,总体长度加一 //输出答案【中间用逗号隔开,最后要换行】 //printf("ans="); printf("%d",a[len]); for(i=len-1;i>=0;i--)printf(",%d",a[i]); printf("\n"); } return 0; }
0 0
- 杭电 1230 火星a+b 【大数】【进制转换】
- 杭电 1230 火星A+B
- 杭电1230 火星A+B
- 杭电ACM 1230 火星A+B
- 杭电acm 1230 火星A+B
- HDU 1230 火星 A + B, 进制转换
- 杭电OJ——1230 火星A+B
- 火星A+B (进制转换变形)
- hdu火星A+B(大数相加)
- 杭电 大数相加 A+B problem2
- 杭电A+B problem1002 (大数)
- 1230 火星 A+B
- 九度OJ 1016:火星A+B (进制转换)
- hdu 1230 火星A+B
- hdu 1230 火星A+B
- hdu 1230 火星A+B
- HDU 1230 火星A+B
- HUD 1230 火星A+B
- 一触即发 App启动优化最佳实践
- 数据挖掘面试--火烈鸟网络
- ssh的增删该查
- 11.08队内胡策
- Codeforces Round #291 (Div. 2) 题解
- 杭电 1230 火星a+b 【大数】【进制转换】
- WebRTC学习资料大全
- Python各种参数
- Android使用Camera2 替代过时的Camera API
- /etc/ld.so.conf文件介绍
- webkit+各种js交互方法
- 微信小程序开发之选择器 时间选择器 日期选择器 地区选择器
- Android多分辨率适配框架使用指南
- 构建嵌入式Linux系统读书笔记