C 练习实例18
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
程序分析:关键是计算出每一项的值。
实例
// Created by www.facesoho.com on 15/11/9.
// Copyright © 2015年 小鸟启蒙. All rights reserved.
//
#include<stdio.h>
int main()
{
int s=0,a,n,t;
printf("请输入 a 和 n:\n");
scanf("%d%d",&a,&n);
t=a;
while(n>0)
{
s+=t;
a=a*10;
t+=a;
n--;
}
printf("a+aa+...=%d\n",s);
return 0;
}
以上实例输出结果为:
请输入 a 和 n: 2 5 a+aa+...=24690

文人墨客
使用递归方法:
#include <stdio.h> #include <math.h> int sumN(int a, int i);//返回i个a int main() { int sum = 0, a, n, i; printf("请输入 a 和 n:\n"); scanf("%d %d", &a, &n); for (i = 1; i <= n; ++i) { sum += sumN(a,i); } printf("a+aa+...=%d", sum); return 0; } int sumN(int a, int i) { if (i >= 1) return sumN(a, i - 1) + a*pow(10,i-1); else return 0; }文人墨客
参考方法:
#include <stdio.h> int main(){ int sum=0,a,n,temp; while(scanf("%d%d",&a,&n)!=EOF){ temp=a; while(n--){ sum+=temp; temp=temp*10+a; } printf("sum=%d\n",sum); } return 0; }文人墨客
参考方法:
#include<stdio.h> long N_A(int a,int n); int main(void) { int a,n; printf("请输入 a 和 n:\n"); scanf("%d%d",&a,&n); printf("a+aa+...=%ld",N_A(a,n)); return 0; } long N_A(int a,int n) { long sum = 0; long temp = a; while(n) { sum += temp; temp = temp*10 + a; n--; } return sum; }文人墨客
参考方法:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> //给数组分配动态内存 int *get_number(int all){ int *temp_number = NULL; //分配空间 temp_number = (int *)malloc((all + 1) * sizeof(int)); if (temp_number == NULL) { fprintf(stderr, "temp_number malloc err\n"); return NULL; } //初始化 memset(temp_number, 0, (all + 1) * sizeof(int)); return temp_number; } //释放分配空间 void free_number(int *number){ if (number == NULL) { return; } free(number); number = NULL; return; } int main(void){ int all = 0, num = 0; int count = 0; int s = 0; int *number = NULL; printf("几个数相加?什么数?\n"); scanf("%d %d", &all, &num); number = get_number(all); for (count = 0; count < all; count++) { number[count] += num; s += number[count]; number[count + 1] = number[count] * 10; } number[all] = '\0'; for (count = 0; count < (all - 1); count++) { printf("%d + ", number[count]); } printf("%d = %d\n", number[count], s); free_number(number); return 0; }文人墨客
参考代码:
思路:利用了数列的一些找规律的方法
#include<stdio.h> #include<math.h> //将计算过程分到了两个函数,其实可以合并,很简单 double f16_step1(int number,int n){ int i=0; double temp1=number/9.0;//计算中间转换分数 double temp2=(pow(10,n)-1)*temp1; printf("%lf\t",temp2); return temp2; } void f16_step2(int number,int n){ int i; double sum=0; for(i=1;i<=n;i++){ sum+=f16_step1(number,i); } printf("sum=%lf\n",sum); } //在主函数中调用f16_step2()即可,修改一下输入和输出,让代码更友好 int main() { f16_step2(2,5); }文人墨客
参考方法:
#include<stdio.h> #include<math.h> int main() { int i, a, n, sum=0; printf("请输入 a 和 n:\n"); scanf("%d%d", &a, &n); for(i=0; i<n; i++) { sum += a*pow(10, i)*(n-i); } printf("sum is %d\n", sum); return 0; }