| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1311 人关注过本帖, 1 人收藏
标题:大家来做一做这道题_求多种算法
只看楼主 加入收藏
qhscqb
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-2-3
结帖率:0
收藏(1)
 问题点数:0 回复次数:10 
大家来做一做这道题_求多种算法
编程实现:
1+11+111+1111+11111+...+111111111=?
.....
9+99+999+9999+99999+...+999999999=?
搜索更多相关主题的帖子: 算法 
2008-05-05 10:30
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
大数加我转化为字符做了,用了汇编的进位的思想
#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]]

学习需要安静。。海盗要重新来过。。
2008-05-05 11:22
qhscqb
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-2-3
收藏
得分:0 
这个比较简单_我的算法
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;
    }   
}

编程快乐,快乐编程! 没有最好,只有更好!
2008-05-05 11:39
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
楼上是这个意思啊,那可以省下8*N次循环了

[color=white]
2008-05-05 11:42
qhscqb
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-2-3
收藏
得分:0 
佩服楼主有才
[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';
        }
 ...

楼主的想法与算法实在叫人佩服,努力学习中...

编程快乐,快乐编程! 没有最好,只有更好!
2008-05-05 11:45
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
/********************************************************
** Highlight software by yzfy(雨中飞燕) http:// *
*********************************************************/
#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]
收到的鲜花
  • 死了都要C2008-05-05 12:47 送鲜花  8朵   附言:安逸哦```
2008-05-05 11:54
qhscqb
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-2-3
收藏
得分:0 
指针算法,妙!
飞燕的想法太精妙了,晚生佩服!

编程快乐,快乐编程! 没有最好,只有更好!
2008-05-05 11:59
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
燕子算法很不错...有点看到灯塔那个题目得味道.....呵呵,如果超出long int的范围,就还要回归到最基本的加法做了

[[it] 本帖最后由 sunkaidong 于 2008-5-5 12:15 编辑 [/it]]

学习需要安静。。海盗要重新来过。。
2008-05-05 12:13
c_acceleration
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2008-4-28
收藏
得分:0 
我觉得不怎么样,如果考虑到机器的实现,不一定快于原版

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

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

天道酬勤
2008-05-05 12:16
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
燕子我封装你的代码..纯粹是觉得好玩...呵呵
#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]]

学习需要安静。。海盗要重新来过。。
2008-05-05 13:18
快速回复:大家来做一做这道题_求多种算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029987 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved