学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
 11 12
发新话题
打印

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

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

编程实现:
1+11+111+1111+11111+...+111111111=?
.....
9+99+999+9999+99999+...+999999999=?

TOP

大数加我转化为字符做了,用了汇编的进位的思想

#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;

[ 本帖最后由 sunkaidong 于 2008-5-5 11:26 编辑 ]
学习需要安静。。海盗要重新来过。。

TOP

这个比较简单_我的算法

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;
    }   
}
编程快乐,快乐编程! 没有最好,只有更好!

TOP

楼上是这个意思啊,那可以省下8*N次循环了

C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org

TOP

佩服楼主有才

引用:
以下是引用 sunkaidong 在 2008-5-5 11:22 的发言:

#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';
        }
...
楼主的想法与算法实在叫人佩服,努力学习中...
编程快乐,快乐编程! 没有最好,只有更好!

TOP

引用:
/********************************************************
** 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;
}
本帖最近评分记录
C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org

TOP

指针算法,妙!

飞燕的想法太精妙了,晚生佩服!
编程快乐,快乐编程! 没有最好,只有更好!

TOP

燕子算法很不错...有点看到灯塔那个题目得味道.....呵呵,如果超出long int的范围,就还要回归到最基本的加法做了

[ 本帖最后由 sunkaidong 于 2008-5-5 12:15 编辑 ]
学习需要安静。。海盗要重新来过。。

TOP

我觉得不怎么样,如果考虑到机器的实现,不一定快于原版

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

[ 本帖最后由 c_acceleration 于 2008-5-5 12:26 编辑 ]

TOP

燕子我封装你的代码..纯粹是觉得好玩...呵呵

#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;
}

[ 本帖最后由 sunkaidong 于 2008-5-5 13:35 编辑 ]
学习需要安静。。海盗要重新来过。。

TOP

 11 12
发新话题