版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本练习假设:整数int为4字节,运行环境为VC 一、整数位数有关的问题1、输入一个整数,判断它是几位数?#include void main()int a,n=0;scanf(%d,&a);答案在后面思路:如何数出位数?while(a0)a/=10;n+;printf(%dn,n);扩展:编制一个函数,参数为整数,返回该整数的位数。答案在后面int digits(int a)int n=0;while(a0)a/=10;n+;return n;2、编制一函数,得到一个整数的某一位的数字。int digit(int a,int n) /*返回:整数a的倒数第n位数,n从1开始*/答案在后面思路:
2、如何将倒数第n位用一个表达式取出?不能!转变成怎样后就能?while(n1)a/=10;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。辗转相除法:余数=大数%小数,然后将小数和余数再作辗转相除。#include void main()int m,n,
3、a,b,d,c;scanf(%d,%d,&m,&n);if(mn)a=m;b=n; /*保证ab*/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,int b)int d,t;if(ab*/while(d=a%b)0) /*每次循环都测试余数是否为0*/a=b;b=d;return b; /*得到最大公约数*/测试上述函数:#include int
4、 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、求出所有的水仙花数。水仙花数是一个三位数,其各位数字的立方和等于该数。例如153=13+53+33。#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
5、 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*100+b*10+a;if(a*a*a+b*b*b+c*c*c=s)printf(%dn,s);类似地:可以求出100以内的勾股数,如32+42=52。三、关于数组的几个题目求2100的精确值。参考:#include void main()double s=1.0;int i;for(i=1;i=100;i+)s*=2;printf(%fn,s);运行结果:1267650600228229400000000000000.000000后面十多位全是0,
6、因此是近似值。如何求精确值呢?(关键是如何保存每一位)#include void main()答案在后面int s100=1; /*初始化第一位为0,其它每一位为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;j9) /*第j位需要进位*/sj+1+=sj/10;sj%=10;if(j+1m) m=j+1; /*最高位进位*/printf(2100 = );for(j=m;j=0;j-)printf(%d,sj);printf(n);运行结果:2100 = 126765060022822940
7、1496703205376扩展问题:如何求出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-0;
8、*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(*a0) ka=1;if(*b9) *(s+1)=1;*s%=10;else *(
9、s+1)=0;if(*s0) *(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 c100;scanf(%s,c);LargeSet(c,a);scanf(%s,c);LargeSet(c,b);LargeAdd(a,b,s);LargeGet(c,s);printf(sum
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026云南玉溪市人民医院第二批就业见习岗位招募52人笔试题库及完整答案详解【网校专用】
- 2026国能新疆煤制气有限公司社会招聘42人考前冲刺密卷附答案详解(完整版)
- 2026年度黑龙江省科学院微生物研究所公开招聘博士科研人员1人考前冲刺试卷(培优B卷)附答案详解
- 2026山东威海市荣成市城西街道城镇公益性岗位招聘2人考前冲刺密卷及参考答案详解(综合题)
- 2026云南中复连众(玉溪)复合材料有限责任公司招聘1人考前冲刺密卷附参考答案详解【能力提升】
- 2026中国农业大学《农药学学报》编辑部招聘备考题库及完整答案详解(名师系列)
- 2026广东广州市黄埔区住房和城乡建设局招聘政府初级雇员1人考前冲刺密卷及参考答案详解(精练)
- 2026四川广安市选聘新兴领域党建工作专员1人备考题库及参考答案详解(A卷)
- 2027山西联考临汾事业单位招聘发布时间模拟试卷【综合题】附答案详解
- 2025年衡岳职业学院单招综合素质考试题库含答案详解【能力提升】
- 2026年国企水质化验笔试试题(含答案)
- 2026福建漳州闽投华阳发电有限公司招聘43人笔试参考题库及答案详解
- 2026海南省农业信贷担保有限责任公司招聘高层管理人员1人考试模拟试题及答案详解
- 2025版中国心肺复苏指南(完整版 含AED使用)
- GB/T 47655-2026电力电子装备和系统的构网性能要求及试验方法
- GA/T 1466.1-2026智能手机型移动警务终端第1部分:技术要求
- 2026年新高考北京政治真题含答案
- 2026年招聘消防文员笔试题库附答案
- 检验科生物安全培训内容及记录
- 【2025年】液化石油气库站工理论考试题库(含答案)
- 围手术期患者安全管理
评论
0/150
提交评论