长理f0803 程序设计2018(均为可运行代码)整数,它加上100后是完全平方数,再加168又是完全平方数,求该数。递归法将一个整数n转换为字符串输出。计算n的阶乘,数组法

1.一个整数,它加上100后是完全平方数,再加168又是完全平方数,求该数。(数字小于10000)

思想:for循环,用int型变量x,y记录平方根,再平方回去,看是否还等于原来的(利用了int型变量自动取整,若是完全平方数,平方根就是整数,不会被舍弃小数部分而不等于原来的)

#include <stdio.h>
#include <math.h>

int main(){
	int i,x,y;
for (i=-100;i<10000;i++){//加上100是完全平方数,所以从-100开始(负数不可能是完全平方数)
	x=sqrt(i+100);
	y=sqrt(i+168);
	if(x*x==(i+100)&&y*y==(i+168)){
	 printf("%d",i);break;}
}


	return 0;
}

2.用递归法将一个整数n转换为字符串输出

思想:如:数字3转换为字符3怎么换?当然是3+‘0’再以字符格式输出啦!

#include <stdio.h>
void tochar(int n);
int main() {
	int n;
	scanf("%d", &n);
	if (n < 0) {
		printf("-");//若是负数则提前输出-再转换为正数 
		n = -n;
	}
	tochar(n);
	return 0;
}

void tochar(int n) {
	int i;
	if ((i=n/ 10 )!= 0) {
		tochar(i);
	}
	putchar(n % 10 + '0');//转换为字符输出 ,递归,个位最后输出 
}

3.计算n!是很难的事实上n=20,计算机的长整型就以及放不下了(事实上可以数组存储很好的解决这个问题,我前面的博客有),但是我们可以用一个程序来编写程序来算出n!的最后一位非0的数。

思想:为了避免数值过大溢出,并且只要求要最后一个非0的数,若我们得到一个结果567000,我们知道要的是7,且后续继续计算阶乘,前面的56与后面的0不会影响到后续阶乘的结果最后一个非0的数。因此每算一次sum就取出最后一次非0的数,这样就完全不会数值溢出了!

#include <stdio.h>

int main() {
	int n,i,s=1;
	scanf("%d", &n);
for(i=1;i<=n;i++){
	s*=i;
	while(s%10==0){
		s/=10;//去除后面的0
	}
	s%=10;//去除前面的,除了最后一位非0的数
}
printf("%d",s);
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值