C语言题目

IUDD 2021-02-08 04:58:31
学校的oj题目 求2de1000次方的个位数相加 程序填空 实在想不出来了 各位大神看看
#include <stdio.h>
#define X 1000
#define Y 400
int Fun() {
int a[Y]={2},b[Y];
int sum=0;
int i,j,m,n;
for (i=1;i<X;++i) {
for (j=0;j<Y;++j)
b[j]=a[j];
for (n=0;n<Y;++n)
if (n==0)
a[n]=2*b[n]%10;
else
___________________________________;
}
for(m=0;m<Y;m++)
sum+=a[m];
return sum;
}
int main(void) {
printf("%d\n",Fun());
return 0;
}
...全文
168 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
forever74 2021-02-09
  • 打赏
  • 举报
回复
a[0]是2,剩下399个都是0
IUDD 2021-02-09
  • 打赏
  • 举报
回复
int a[Y]={2}的意思是数组里面每个元素都是2吗
forever74 2021-02-09
  • 打赏
  • 举报
回复
一个数有很多位,它要乘以2 积的个位=原数的个位×2的结果取个位 积的十位=(原数的十位×2的结果+原数的个位×2的结果的十位)的结果取个位 积的百位=(原数的百位×2的结果+原数的十位×2的结果的十位)的结果取个位 循环吧 以上描述中提到的位是十进制下的单独一个数位,提到的×2的结果可能是1位数也可能是2位数,结果的十位就是进位的意思 你自己随便写个竖式计算,然后记住每个数字都是单独的变量(数组元素),然后描述计算过程,就是这样了
swl.乌鸦 2021-02-09
  • 打赏
  • 举报
回复
引用 7 楼 forever74 的回复:
超大数计算超高精度计算基本就都是这么写的,网上一搜一大堆,就是硬模拟竖式计算嘛。不光是乘2,更重要的是四则和各种其他运算。当然这个代码不够精致,还有一些无用功在里面。
请问,我还是有些搞不懂硬模拟竖式计算是怎么模拟计算的?
forever74 2021-02-08
  • 打赏
  • 举报
回复

#include <stdio.h>
#define X 1000
#define Y 400
int Fun() {
	int a[Y] = { 2 }, b[Y]; //原本有个2
	int sum = 0;
	int i, j, m, n;
	for (i = 1; i < X; ++i) { //这个循环999次,每次乘2
		for (j = 0; j < Y; ++j) //把上次结果保存起来作为下次的运算数
			b[j] = a[j];
		for (n = 0; n < Y; ++n) //这个就是a=b*2
			if (n == 0)
				a[n] = 2 * b[n] % 10;  //最低位也就是个位不用考虑进位,因为没人给它进
			else 
				a[n]=(2*b[n]+2*b[n-1]/10)%10; //其他位就得考虑进位了,a[1]是十位,a[2]是百位,依次类推
	}
	for (m = 0; m < Y; m++) //按要求累加各数位
		sum += a[m];
	return sum;
}
int main(void) {
	printf("%d\n", Fun());
	return 0;
}
输出 1366
IUDD 2021-02-08
  • 打赏
  • 举报
回复
老哥要不可以从第一个循环开始到结束详细注释一下吗 就把我当成一个新手解释一下 这个确实是看不懂
forever74 2021-02-08
  • 打赏
  • 举报
回复
按照10进制从低到高一位一位算,考虑到低位进上来的进位就行。如果你说的是填空的这句话的话。
forever74 2021-02-08
  • 打赏
  • 举报
回复
超大数计算超高精度计算基本就都是这么写的,网上一搜一大堆,就是硬模拟竖式计算嘛。不光是乘2,更重要的是四则和各种其他运算。当然这个代码不够精致,还有一些无用功在里面。
IUDD 2021-02-08
  • 打赏
  • 举报
回复
你好 可以解释一下思路吗 就是怎么想出来要这么写的
forever74 2021-02-08
  • 打赏
  • 举报
回复
就是计算2的1000次方的值,因为它太大,所以需要用数组元素表示它的各位数字。计算的时候参考手写竖式的计算过程。
forever74 2021-02-08
  • 打赏
  • 举报
回复
a[n]=(2*b[n]+2*b[n-1]/10)%10
IUDD 2021-02-08
  • 打赏
  • 举报
回复
可以的话顺便解释一下这个代码 不带清楚这个想要干嘛
IUDD 2021-02-08
  • 打赏
  • 举报
回复
要求: 2^15 = 32768 ,其各位之和为 3 + 2 + 7 + 6 + 8 = 26。 求2^1000各位数字之和。其中^表示次方,如:2^5表示2的5次方。 下面程序计算并输出结果,请完成缺少的语句。要求参赛选手在弄清给定代码的基础上填写缺失的部分,使得程序逻辑正确、完整。所填写的代码不多于一条语句(即不能出现分号)。
forever74 2021-02-08
  • 打赏
  • 举报
回复
说清楚要求,不要让人猜。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧