| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5204 人关注过本帖
标题:菜鸟解决不了的加法来人帮忙啊!
只看楼主 加入收藏
hello_moto
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2008-7-15
收藏
得分:0 
[bo][un]卧龙孔明[/un] 在 2008-8-6 09:15 的发言:[/bo]



首先和你说个问题。
高精度计算广泛运用的时候,一般都不是为了只做这样的简单的程序的,一般都是在程序内部的(包括算法程序)。
所以,高精度运算的效率评估,应该除去初始转换过程的时间消耗。
因为我们评 ...

我也你说个问题啊。
我用字符串方法解答的是这个特定的题目,
并不代表我一定用字符串方法解答所以高精度计算。
2008-08-06 09:42
爱喝牛奶的猫咪
Rank: 1
来 自:QQ群46520219
等 级:禁止访问
帖 子:513
专家分:0
注 册:2008-6-16
收藏
得分:0 
[bo][un]hello_moto[/un] 在 2008-8-6 09:40 的发言:[/bo]

真能扯,服了你了。
10000的阶乘不用解析字符串,和这一道题有本质的区别。两个截然不同的题,当然会用不同的方法!
这一题用你的int数组法,差就差在解析字符串的时间上!

如果你硬要和我比解析字符串的时间+运算时间的话,那好啊
要比你5楼的代码快可是轻而易举的


[color=white]<" border="0" />>
2008-08-06 09:47
hello_moto
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2008-7-15
收藏
得分:0 
[bo][un]爱喝牛奶的猫咪[/un] 在 2008-8-6 09:47 的发言:[/bo]


如果你硬要和我比解析字符串的时间+运算时间的话,那好啊
要比你5楼的代码快可是轻而易举的


 

你老是故意转移话题还是听不懂别人说什么啊。
我没说我的方法是最快的,OK?
我是说字符串的方法,比你的转成int数组的快多了,听懂了没有?
2008-08-06 09:50
爱喝牛奶的猫咪
Rank: 1
来 自:QQ群46520219
等 级:禁止访问
帖 子:513
专家分:0
注 册:2008-6-16
收藏
得分:0 
那你还打不打算优化一下你的代码?不打算的话偶就按你那个的运算时间作为参考了

既然我说要比你的快,我还会用字符串像你那样慢慢一位一位算这么笨吗?


[color=white]<" border="0" />>
2008-08-06 10:06
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
kao
2008-08-06 10:26
hello_moto
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2008-7-15
收藏
得分:0 
好,那我想看看效率能提高多少。(字符长度200,测试次数1000000)
我觉得不管是你的代码中是否体现出来,计算机的处理肯定是要一位一位遍历计算的。
2008-08-06 10:33
爱喝牛奶的猫咪
Rank: 1
来 自:QQ群46520219
等 级:禁止访问
帖 子:513
专家分:0
注 册:2008-6-16
收藏
得分:0 
为了公平,程序的输入接口要改一下,改为:
int Input()
{
    static int n=0;
    static char p[] = "9999999999999999999999999999999999999999999999999999999999999999999999\
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\
9999999999999999999999999999999999999";
    if(++n<=1000000)
    {
        strcpy(strA, p); //strA和strB为两个全局变量,免掉传参,名字可变
        strcpy(strB, p);
        return 1;
    }
    return 0;
}

主程序部分由
    while (Input())
    {
        //your code
    }
作为主体,以方便多次执行测试
PS. 因为你要测试字符串解释,所以就从你接收串开始循环计算,连同接收处理也算进去


[color=white]<" border="0" />>

[[it] 本帖最后由 爱喝牛奶的猫咪 于 2008-8-6 11:26 编辑 [/it]]
2008-08-06 11:18
hello_moto
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2008-7-15
收藏
得分:0 
接受字符串都是一个方法,这个时间可以不比较的,我是从字符串设置好了之后开始计时的。
公平的问题你多虑了。
2008-08-06 11:27
爱喝牛奶的猫咪
Rank: 1
来 自:QQ群46520219
等 级:禁止访问
帖 子:513
专家分:0
注 册:2008-6-16
收藏
得分:0 
因为我免得你不计算strrev的时间,因为这也算作处理字符串的一部分
没有理由你只计算我的处理时间的而不计算你的吧?

/*******************************************************************
** HighlightCodeV3.2 software by yzfy(雨中飞燕) http:// **
*******************************************************************/
#include <stdio.h>
#include <string.h>

void fun(char* a, char* b, char* res)
{
   
int JinWei=0,i=0,temp_sum;
    while (*a&&*b)
    {
        
temp_sum = (*a++ - '0') + (*b++ - '0') + JinWei;
        (temp_sum>=10)?(JinWei = 1,res[i++] = temp_sum - 10 + '0'):(JinWei = 0,res[i++] = temp_sum + '0');
    }
   
(*a)?(a=a):(a=b);
    while(*a)
    {
        
temp_sum = (*a++ - '0') + JinWei;
        (temp_sum>=10)?(JinWei = 1,res[i++] = temp_sum - 10 + '0'):(JinWei = 0,res[i++] = temp_sum + '0');
    }
   
if(JinWei) res[i++] = '1';
    res[i] = '\0';
}
char a[205], b[205], res[205];

int Input()
{
   
static int n=0;
    static char p[] = "999999999999999999999999999999999999999999999999999999999999\
99999999999999999999999999999999999999999999999999999999999999999999999999999999999\
999999999999999999999999999999999999999999999999999999999"
;
    if(++n<=1000000)
    {
        
strcpy(a, p);
        strcpy(b, p);
        return 1;
    }
   
return 0;
}

int main()
{
   
while(Input())
    {
        
fun(_strrev(a),_strrev(b),res);
        //printf("%s\n",_strrev(res));
   
}
   
return 0;
}


这样可以不??
(PS. 最后一步的strrev就给你省了,不算你那个的时间,不过假如你还是要算上也可以。。)

[color=white]<" border="0" />>

[[it] 本帖最后由 爱喝牛奶的猫咪 于 2008-8-6 11:35 编辑 [/it]]
2008-08-06 11:32
hello_moto
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2008-7-15
收藏
得分:0 
说过了,你多虑了。放心的写吧。
我只想看看效率更高的程序而已,又不是存心和你找茬。
2008-08-06 11:34
快速回复:菜鸟解决不了的加法来人帮忙啊!
数据加载中...
 
   



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

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