当前位置: 代码迷 >> C语言 >> 大家来做一做这道题_求多种算法
  详细解决方案

大家来做一做这道题_求多种算法

热度:270   发布时间:2008-05-05 10:30:35.0
大家来做一做这道题_求多种算法
编程实现:
1+11+111+1111+11111+...+111111111=?
.....
9+99+999+9999+99999+...+999999999=?
搜索更多相关的解决方案: 算法  

----------------解决方案--------------------------------------------------------
大数加我转化为字符做了,用了汇编的进位的思想
#include<cstdio>
int main(void)
{
    char c[10][100]={'0'};
    char ch[100];
    int sum=0;
    int inc=0;
    for(int i=0;i<10;i++)
    {
        for(int j=9-i;j>=0;j--)
        {
            c[i][j]='9';
        }
        for( j=i;j>0;j--)
        {
            c[i][10-j]='0';
        }
        printf("%s\n",c[i]);
    }
    printf("\n");
    for(i=0;i<10;i++)
    {
        for(int j=0;j<10;j++)
        {
            sum+=(c[j][i]-'0');
        }
        sum=sum+inc;
        inc=0;
        ch[i]=(sum%10)+'0';
        inc=sum/10;
        sum=0;
        if(i==9)
        {  
            while((inc>0)&&(ch[++i]=inc%10+'0'))
            {
                inc=inc/10;
            };
           ch[++i]='\0';
        }
    }
    puts(ch);
return 0;

[[it] 本帖最后由 sunkaidong 于 2008-5-5 11:26 编辑 [/it]]
----------------解决方案--------------------------------------------------------
这个比较简单_我的算法
void main()
{
    int i,j;
    long s=0,p=0;
    for (i=1;i<=9;i++)
    {
        for (j=1;j<=9;j++)
        {
            s=s*10+i;
            p+=s;
            if (j==9)
                printf("%ld=",s);
            else
                printf("%ld+",s);
        }
        printf("%ld\n\n",p);
        s=0;p=0;
    }   
}
----------------解决方案--------------------------------------------------------
楼上是这个意思啊,那可以省下8*N次循环了

[color=white]
----------------解决方案--------------------------------------------------------
佩服楼主有才
[bo]以下是引用 [un]sunkaidong[/un] 在 2008-5-5 11:22 的发言:[/bo]

#include
int main(void)
{
    char c[10][100]={'0'};
    char ch[100];
    int sum=0;
    int inc=0;
    for(int i=0;i=0;j--)
        {
            c[j]='9';
        }
        for( j=i;j>0;j--)
        {
            c[10-j]='0';
        }
...

楼主的想法与算法实在叫人佩服,努力学习中...
----------------解决方案--------------------------------------------------------
/********************************************************
** Highlight software by yzfy(雨中飞燕) http://yzfy.org *
*********************************************************/
#include <stdio.h>
void pt(int n)
{
    char* str="1+11+111+1111+11111+...+111111111=";
    for(; *str; ++str)
    {
        if(*str=='1')putchar(n+'0');
        else putchar(*str);
    }
}
int main()
{
    int i,j;
    long p=0,s=0; //TC in dos???
    for (j=1;j<=9;j++)
    {
        s=s*10+1;
        p+=s;
    }
    for(i=1;i<=9;++i)
    {
        pt(i);
        printf("%ld\n",p*i);
    }
    return 0;
}


[color=white]
本帖最近评分记录
2008-05-05 03:54:18
qhscqb

等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-2-3
  得分:0 
指针算法,妙!
飞燕的想法太精妙了,晚生佩服!
----------------解决方案--------------------------------------------------------
燕子算法很不错...有点看到灯塔那个题目得味道.....呵呵,如果超出long int的范围,就还要回归到最基本的加法做了

[[it] 本帖最后由 sunkaidong 于 2008-5-5 12:15 编辑 [/it]]
----------------解决方案--------------------------------------------------------
我觉得不怎么样,如果考虑到机器的实现,不一定快于原版

你们继续,算法是不错的,呵呵。。

[[it] 本帖最后由 c_acceleration 于 2008-5-5 12:26 编辑 [/it]]
----------------解决方案--------------------------------------------------------
燕子我封装你的代码..纯粹是觉得好玩...呵呵
#include <cstdio>
#ifndef PLUS_CLASS
#define PLUS_CLASS
class plus
{
public:
    static void init();    
    void pt(int n);    
private:
   static  long p;
   static  long s;
};
long plus::p=0;
long plus::s=0;
void plus::init()
{
    for (int j=1;j<=9;j++)
      {
         s=s*10+1;
         p+=s;
       }
    
}
void plus::pt(int n)
{
      char* str="1+11+111+1111+11111+...+111111111=";
       for(; *str; ++str)
      {
        if(*str=='1')putchar(n+'0');
        else putchar(*str);
      }
       printf("%ld\n",p*n);
}
#endif
int main()
{   
    plus p;
    plus::init();
    for(int i=1;i<=9;++i)
    {
        p.pt(i);
        
    }
    return 0;
}

[[it] 本帖最后由 sunkaidong 于 2008-5-5 13:35 编辑 [/it]]
----------------解决方案--------------------------------------------------------
  相关解决方案