C语言:将自然数1~1000中所有既是6的倍数又是9的倍数的数累加,并输出所有参加累加的数及累加和

C语言:将自然数1~1000中所有既是6的倍数又是9的倍数的数累加,并输出所有参加累加的数及累加和,第1张

int main()

{

int nSum=0;

int nCnt=0;

for(int i=9 ;i<=1000;i=i+3)//也可以是i=i+1,只是慢一些。由于6、9的倍数必定是3的倍数,+3会比较快一些

{

if(i % 6==0 && i%9==0)//既是6的倍数,又是9的倍数

{

nSum+=i;//累加和

printf ("%d\t",i);

nCnt++;

if(nCnt==10)

{

nCnt=0;

printf("\n");//10个换行

}

}

}

printf("\n");//10个换行

printf ("总和是%d\n",nSum);//累加和单独输出

}

题目中数据很大

于是我们有了高精度算法

思路是什么呢:

一个数组里面每一位存的是十进制数三位(也可以只存一位,但是比较慢)

也可以理解成一千进制

这样能模拟大整数的乘法、加法

#include<stdioh>

#include<stringh> 

#define max(a,b) (a>ba:b)

int n;

FILE  input,  output;

struct bigint

{

int len;

int num[1100];

}fac,sum;

void mul(int value){//高精度乘单精度

int i;

for (i=1;i<=faclen;i++)

facnum[i]=facnum[i]value;//每个数位乘上数

for (i=1;i<=faclen;i++)

if (facnum[i]>=1000) {//逢千进一

facnum[i+1]+=facnum[i]/1000;facnum[i]%=1000;

}

if (facnum[faclen+1]) faclen++;//位数可能会增加,而且最多增加1

}

void add()//给sum加上fac的值

{

int i;

//由于此时fac永远大于sum所以不用判断sum的长度

for (i=1;i<=faclen;i++)

sumnum[i]+=facnum[i];//每一位加上fac的值

for (i=1;i<=faclen;i++)

if (sumnum[i]>=1000){//逢千进一

sumnum[i+1]++;sumnum[i]-=1000;//因为加法运算不可能往前进2

}

sumlen =faclen;

if (sumnum[sumlen+1]) sumlen++;

}

void out()//输出

{

int i;

for (i=sumlen;i>=1;i--)

{

if (i<sumlen) //压位高精度一定要判断位数

{//因为如果不是第一位,其他要补0,因为如果这个数是1001,就会变成11

 if (sumnum[i]<10) fprintf(output,"00");

else if (sumnum[i]<100) fprintf(output,"0");

}

fprintf(output,"%d",sumnum[i]);

}

fputc('\n',output);

}

int main(){

input = fopen("factorin","r");

output = fopen("factorout","w");

memset(facnum,0,sizeof facnum);

memset(sumnum,0,sizeof sumnum); 

fscanf(input,"%d",&n);

int i;

faclen = sumlen = 1;//初始赋成1

facnum[1] = sumnum[1] = 1;

for (i=2;i<=n;i++)

{

mul(i);

add();

}

out();

fclose(input);fclose(output);

return 0;

}

1、交换(两量交换借助第三者) 不借助第三个变量

参考:

>

import javautilScanner;

public class Main {

public static void main(String[] args) {

Scanner sc = new Scanner(Systemin);

int n = scnextInt();

Systemoutprintln(f(n));

}

public static int f(int n) {

if (n == 1)

return 1;

else {

return n + f(n - 1);

}

}

}

以上就是关于C语言:将自然数1~1000中所有既是6的倍数又是9的倍数的数累加,并输出所有参加累加的数及累加和全部的内容,包括:C语言:将自然数1~1000中所有既是6的倍数又是9的倍数的数累加,并输出所有参加累加的数及累加和、c语言求阶乘累加和、(2)非数值计算常用经典算法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10192888.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存