A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

求s=a+aa+aaa+aaaa+aa...的值,其中a是一个数字

16 个回复

倒序浏览

大家交流一下思想

本帖最后由 尹世伟 于 2015-5-24 10:35 编辑

这个好吧  我们交流下我的思
  1. //
  2. //  main.c
  3. //  求S(n) = a+aa+aaa+aaaa+...+aa..a之值,其中a是一个数字,n表示a的位数例如:2+22+222+2222+22222(此时n=5),n和a都从键盘输入
  4. //
  5. //  Created by pcbeta on 15/5/22.
  6. //  Copyright (c) 2015年 ahyin007. All rights reserved.
  7. //

  8. #include <stdio.h>
  9. /**
  10. *  10为底的指数函数
  11. */int e(int n)
  12. {
  13.     int mul = 1;
  14.     while (n-- > 0)
  15.     {
  16.         mul = mul * 10;
  17.     }
  18.     return mul;
  19. }
  20. int main(int argc, const char * argv[])
  21. {
  22.     int n = 0,a = 0,s = 0,num = 0;
  23.     printf("请输入位数n和数字a空格隔开:\n");
  24.     scanf("%d%d",&n,&a);
  25.     //s(n)=a*e0+a*e1+...+a*e(n-1)
  26.     for (int i = 1; i <= n; i++)
  27.     {
  28.         for (int j = 0; j <= i - 1; j++)
  29.         {
  30.             num = a*e(j);
  31.             s = s + num;
  32.         }
  33.     }
  34.     printf("s = %d\n",s);
  35.     return 0;
  36. }
复制代码

回复 使用道具 举报
你要递归实现还是循环实现,
回复 使用道具 举报
循环的题目把
回复 使用道具 举报
等待大神的代码出现。。
回复 使用道具 举报
int main()
{int n,a,sum,num;sum=num=a;
    printf("输入一个数表示\'a\,一个数表示\'n\';");scanf("%d%d",&a,&n);
    for (int j=1; j<n; j++) {
        a*=10;num+=a;sum+=num;
    }
   
    printf("%d",sum);}
回复 使用道具 举报 1 0
本帖最后由 cui0wei0 于 2015-5-24 14:05 编辑
  1. int main(int argc, const char * argv[]) {

  2.     int a = 5, num = 0, sum = 0;
  3.     for (int i = 0; i < 5; i++)
  4.         {
  5.         num += a;
  6.         sum += num;
  7.         a *= 10;
  8.         }
  9.     printf("%d",sum);
  10. }
复制代码

回复 使用道具 举报
这个我也想了很久,开始还理解错了,后来改的.
  1. #include <stdio.h>

  2. int main(){
  3.     //定义变量用来储存用户输入值
  4.     int n = -1,a = -1;
  5.    
  6.     //判定输入数字的合法性
  7.     while (n < 0|| a < 0)
  8.     {
  9.         //提示输入正整数
  10.         printf("请输入正整数:n(表示位数)和a(表示数字)(用空格断开):\n");
  11.         scanf("%d%d",&n,&a);
  12.     }
  13.    
  14.     //输出图案
  15.     for (int i = 1;i<=n; i++) {
  16.         for (int j = 1;j <= i;j++)
  17.         {
  18.             printf("%d",a);
  19.         }
  20.         printf("\n");
  21.     }
  22.     //    a*1
  23.     //    a*1+a*10
  24.     //    a*1+a*10+a*100
  25.     //    a*1+a*10+a*100+a*1000
  26.     //    a*1+a*10+a*100+a*1000+a*10000
  27.     //
  28.     //    n*a+(n-->0递减)*a*(0-->n递增)*10
  29.    
  30.     //定义变量用来保存结果和过程借用值
  31.     int sum = 0;
  32.     int x = n;
  33.    
  34.     //声明10的n次方函数
  35.     int tenNSquare ();
  36.    
  37.     for (int l = 0; l <= n; l++)
  38.     {
  39.         sum = sum + x * a * (tenNSquare(l));
  40.         x = x - 1;
  41.     }
  42.     //输出值
  43.     printf("结果是:%d.\n",sum);
  44.     return 0;
  45.    
  46. }

  47. //编写函数,10的N次方
  48. int tenNSquare(int num1)
  49. {
  50.     int jieguo = 1;
  51.     for (int n = 1; n <= num1; n++)
  52.     {
  53.         jieguo = jieguo * 10;
  54.     }
  55.     return jieguo;
  56. }
复制代码
回复 使用道具 举报 1 0
看着就牙疼的题目
回复 使用道具 举报
学这,公司会用么
回复 使用道具 举报
我是这样实现的

  1. #include <stdio.h>

  2. int main(int argc, const char * argv[])
  3. {
  4.     int userNeedNum = 0,count = 0;
  5.     printf("请问你想要每位一样的数字是:\n");
  6.     scanf("%d",&userNeedNum);
  7.     printf("请问你想要多少个数字:\n");
  8.     scanf("%d",&count);
  9.    
  10.     for (int i = 1; i <= count; i++)
  11.     {
  12.         for (int j = i; j >= 1; j--)  printf("%d",userNeedNum);
  13.         
  14.         if (i != count)     printf("*");
  15.     }
  16.    
  17.     return 0;
  18. }
复制代码
回复 使用道具 举报
//2+22+222+2222+22222=?(仅提供思路,考虑不周欢迎拍砖)
#include<stdio.h>
#define max 1000
int ar[max]={0};//按10进制位顺序存储结果
int moreThanTen(int x,int n)
{
        int j=0,m=0;
        if(x>9)
        {
                for(j=1;j<10;j++)
                {
                  m=x-10*j;
                  if(m<10)
                  {
                           x=m;
                           ar[n]=x;
                           return j;
                  }
           }
        }
        else{
                ar[n]=x;
                return 0;
        }
        return 0;
}
void printTitle(int n,int a)
{
        int j,m;
        for(j=1;j<=n;j++)
        {
           for(m=1;m<=j;m++)
                 printf("%d",a);
                 if(j<n)
                 printf("+");
                 else
                  printf("=");
        }
}
int main(){
        int n=0,i=0,a=0,x=0,y=0;
        printf("请输入位数(n<1000)和数字(a<10)并用逗号隔开,如(5,2):\n");
        while(a<10)
        {
                scanf("%d,%d",&n,&a);
                if(a>9) break;
                printTitle(n,a);//打印题目
                for (i=n;i>=1;i--)
                {
                        x=a*i+y;//竖式计算
                        y=moreThanTen(x,i);//处理遇10进1,同时按10进制位顺序存储结果
                }
                for (i=1;i<=n;i++)
                {
                        printf("%d",ar[i]);//打印正向结果
                        if(i==n)
                                printf("\n继续测试,输入(5,11)退出\n",ar[i]);
                }
        }
return 0;
}

回复 使用道具 举报
思路是 看到很有规律,可以选择for 循环。比如a = 4,则 s = 4 + 44 + 444 + 4444规律在于44 = 4*10 +4;444 = 44*10+4;4444 = 444*10 + 4 4次循环,设定好变量,就可以实现了。
回复 使用道具 举报
#include <stdio.h>

int main() {
    printf("请输入一个正整数!\n");
    int a = 0;
    scanf("%d",&a);
    int temp = a, result = 0;
    for (int i = 1; i < a; i++) {
        
        temp = temp * 10 + a;
        result = result + temp;
    }
    result += a;
    printf("%d",result);
    return 0;
}
回复 使用道具 举报
x331275955 发表于 2015-5-24 17:41
这个我也想了很久,开始还理解错了,后来改的.

妹子不好这么做
回复 使用道具 举报
复制下来,运行试试。。。。不过单看题目这道题没终点啊
回复 使用道具 举报
这么多答案!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马