版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本练习假设:整数int为4字节,运行环境为 VC 一、整数位数有关的问题1、输入一个整数,判断它是几位数#include <>void main()int a,n=0;scanf("%d",&a);wh唆保海思路:如何数出位数a/=10;n+;Jprintf("%dn",n);扩展:编制一个函数,参数为整数,返回该整数的位数。哮dg懦nt a)int n=0;while (a>0)a/=10;n+;return n;42、编制一函数,得到一个整数的某一位的数字。int digit( int a,int n) /*返回:整数a的倒
2、数第n位数,n从1开始*/ whMH息路:如何将侄数第n位用 一个割理取出 不能!门转变成怎样后就能 return a%10;测试函数的例子:#include <>int digit( int a,int n); void main()int a,n,d;scanf("%d%d",&a,&n);d=digit(a,n);printf("%dn",d);二、关于整数的几个题目1、输入两个正整数m和n,求其最大公约数和最小公倍数。算法分析:采用辗转相除法,先求出最大公约数d,然后求最小公倍数c=m*n/d。辗转相除法:余数 次数小
3、数,然后将小数和余数再作辗转相除。#include <>void main() int m,n,a,b,d,c;scanf("%d,%d",&m,&n);if(m>n)a=m;b=n;/* 保证 a>b*/else a=n;b=m;while (d=a%b)>0) /*每次循环都测试余数是否为0*/a=b;b=d;d=b; /*得到最大公约数*/c=m*n/d;/*得到最小公倍数*/printf("最大公约数是 dn最小公倍数是 dn",d,c);拓展:编出求最大公约数的函数。int mcd(int a,in
4、t b)int d,t;if(a<b)t=a;a=b;b=t;/* 保证 a>b*/while (d=a%b)>0) /*每次循环都测试余数是否为0*/a=b;b=d;return b; /*得到最大公约数*/测试上述函数:#include <>int mcd(int a,int b);void main()int m,n,d,c;scanf("%d,%d",&m,&n);d=mcd(m,n);c=m*n/d;printf("最大公约数是 dn最小公倍数是 dn",d,c);2、求出所有的水仙花数。水仙花数是
5、一个三位数,其各位数字的立方和等于该数。例如 153=1人3+5=3+3人3 。#include <>void main()int s,a,b,c;for(s=100;s<=999;s+)a=s%10; b=s/10%10;c=s/100; /* 分解出每一位 */if(a*a*a+b*b*b+c*c*c=s) printf("%dn",s);按位循环:#include <>void main()int s,a,b,c;for(a=0;a<=9;a+)for(b=0;b<=9;b+)for(c=1;c<=9;c+)s=c*10
6、0+b*10+a;if(a*a*a+b*b*b+c*c*c=s) printf("%dn",s);类似地:可以求出 100以内的勾股数,如3A2+4A2=5A2。三、关于数组的几个题目求2100的精确值。参考:#include <>void main()double s=;int i;for(i=1;i<=100;i+)s*=2; printf("%fn",s);运行结果: 后面十多位全是0,因此是近似值。如何求精确值呢(关键是如何保存每一位)#include <> void main()1%巢100惭;/*初始化第一位为0
7、,其它每一位为 0*/int i,j,m=0;/*m 指示最高位为 sm*/for(i=1;i<=100;i+)for(j=0;j<=m;j+)sj*=2;for(j=0;j<=m;j+)/* 检查进位 */if(sj>9)/*第j位需要进位*/ sj+1+=sj/10;sj%=10; if(j+1>m) m=j+1;/* 最高位进位 */printf("2A100 =");for(j=m;j>=0;j-)printf("%d",sj);printf("n");运行结果:2A100 = 22940扩
8、展问题:如何求出100!的精确值缺陷:如果乘以一个很大的数如20亿,会使高一位与进位相加后溢出。四、大数运算用整数数组存放每一位,最高位用-1存储,如12存为:a0=2,a1=1,a2=-1。1、输入和存储大数。编制一函数,将合法数字组成的字符串表示的大数按位拆分存储到整数数组中,最高位前存储-1。/*转换大数:将字符串c中的数字保存到整数数组a中,a最高位添加-1标志*/ void LargeSet(char *c, int *a) char *p;for(p=c;*p!='0'p+);/*找到末尾作为最低位 */P-;for(;p>=c;p-,a+)*a=*p-
9、9;0'*a=-1; 2、输出和获得数字串。编制一函数,将大数转换成字符串。/*转换大数:将大数 a转换成字符串存入字符数组c中*/void LargeGet(char *c, int *a)int *p;for(p=a;*p>=0;p+);P-;for(;p>=a;c+,p-)*c=*p+'0'*c='0'3、大数相加。编制一函数,实现两个大数相加。void LargeAdd(int *a, int *b, int *s) /* 大数相加:s=a+b*/int ka=0,kb=0;for(*s=0;ka=0|kb=0;s+)if(*a<
10、;0) ka=1;if(*b<0) kb=1;if(ka=0) *s+=*a; a+;if(kb=0) *s+=*b; b+; if(*s>9) *(s+1)=1;*s%=10; else *(s+1)=0;if(*s>0) *(s+1)=-1;else if(*(s-1)>0) *s=-1;else *(s-1)=-1;验证上面的函数:#include <>void LargeSet(char *a, int *s);void LargeGet(char *a, int *s);void LargeAdd(int *a, int *b, int *s);void main()int a100,b100,s100;char c10
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新疆2024年新疆兵团中心血站招聘2人笔试历年典型考点(频考版试卷)附带答案详解
- 2025年数控石油深井测井仪项目规划申请报告模板
- 2025年液体制剂机械项目申请报告模板
- 2025年儿童医院项目申请报告模板
- 买卖合同协议书模板五篇
- 2024年航空材料采购合同关键内容
- 实习月报范文模板【五篇】
- 公司员工离职申请书集锦7篇
- 酒店实习报告模板锦集5篇
- 2023年教师个人总结心得大全(四篇)
- 广东省广州市2021-2022学年高二上学期期末五校联考生物试题
- 舞蹈演出编导排练合同模板
- 沪科版2024-2025学年七年级数学上册计算专题训练专题18期末复习-四大必考题型总结(学生版+解析)
- 2024短剧行业发展趋势分析报告
- 中国法律史-001-国开机考复习资料
- 2024年人教版一上数学期末测试卷(一)增改版(含答案)
- 北京市西城区2023-2024学年六年级上学期语文期末试卷(含答案)
- 期末综合测试卷(试题)-2024-2025学年五年级上册数学人教版
- 【MOOC】模拟电子技术-中南大学 中国大学慕课MOOC答案
- 【MOOC】线性代数-同济大学 中国大学慕课MOOC答案
- 建筑施工安全知识培训
评论
0/150
提交评论