| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 626 人关注过本帖
标题:请教一个编程的问题。
只看楼主 加入收藏
yangfanconan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:10
帖 子:397
专家分:541
注 册:2009-9-22
结帖率:100%
收藏
 问题点数:0 回复次数:3 
请教一个编程的问题。
大家应该都用过 科学计算器,就是那种市面上便宜的20块 贵的好几百,那种,他们有一个通性就是都能 计算一些十分复杂的长运算式,很好奇这些计算器是怎么实现的。
现在很多网上流传的计算器代码貌似很多都不能达到这样的技术。

谢谢。
搜索更多相关主题的帖子: 计算器 长运 
2011-04-30 15:47
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
好像是通过栈来实现的,数据结构里有讲。不过我不会, 呵呵

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-30 15:56
yangfanconan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:10
帖 子:397
专家分:541
注 册:2009-9-22
收藏
得分:0 
程序代码:
// 简单科学家计算器.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<math.h>
#include<malloc.h>

double jisuan(char a[])
{

 int i=1,j,k,m,cnt=0,t1=0,t2=0,t3=0;
    char nibo[50],zhan2[50];

 double x,n,l,z=0,zhan3[50];

 typedef struct

 {
        double d1;
  int d2;

 }dd;

 typedef struct

 {
  dd data[50];
  int top;
    }zhan1;

 zhan1 *shu;

 shu=(zhan1 *)malloc(sizeof(zhan1));

 shu->top=0;
   while(a[i]!='\0')

 {
  if(a[i]>='0'&&a[i]<='9')
  {
   z=0;
   j=i+1;
   while(a[j]>='0'&&a[j]<='9')
   {j++;}
   j--;
   for(k=i;k<=j;k++)
   {
         z=z*10+a[k]-'0';
   }
   j=j+1;
   x=z;
       if(a[j]=='.')
   {
    l=1;
    i=j+1;
    j=i+1;
    while(a[j]>='0'&&a[j]<='9')
    {j++;}
       j--;
       for(k=i;k<=j;k++)
    {
     n=pow(0.1,l);
     l=l+1;
           x=x+n*(a[k]-'0');
    }
    i=j+1;
   }
   else i=j;
   shu->data[++shu->top].d1=x;
   shu->data[shu->top].d2=++cnt;
   nibo[++t1]='0'+shu->data[shu->top].d2;
   nibo[t1+1]='\0';
  }
  else if(a[i]=='(')
  {
   zhan2[++t2]=a[i];
   i++;
  }
  else if(a[i]==')')
  {
   j=t2;
   while(zhan2[j]!='(')
   {
    nibo[++t1]=zhan2[j];
    nibo[t1+1]='\0';
    j--;
   }
   t2=j-1;
   i++;
  }
  else if(a[i]=='+')
  {
   while(t2>0&&zhan2[t2]!='(')
   {
    nibo[++t1]=zhan2[t2];
    nibo[t1+1]='\0';
    t2--;
   }
   zhan2[++t2]=a[i];
   i++;
  }
  else if(a[i]=='-')
  {
   if(a[i-1]=='$')
   {
    a[0]='0';
    i=0;
   }
   else if(a[i-1]=='(')
   {
    a[i-1]='0';
    a[i-2]='(';
    i=i-2;
    t2--;
   }
   else
   {
       while(t2>0&&zhan2[t2]!='(')
    {
    nibo[++t1]=zhan2[t2];
    nibo[t1+1]='\0';
    t2--;
    }
       zhan2[++t2]=a[i];
       i++;
   }
  }
  else if(a[i]=='*'||a[i]=='/')
  {
   while(zhan2[t2]=='*'||zhan2[t2]=='/'||zhan2[t2]=='^'||zhan2[t2]=='#')
   {
    nibo[++t1]=zhan2[t2];
    nibo[t1+1]='\0';
    t2--;
   }
   zhan2[++t2]=a[i];
   i++;
  }
  else if(a[i]=='^'||a[i]=='#')
  {
   while(zhan2[t2]=='^'||zhan2[t2]=='#')
   {
    nibo[++t1]=zhan2[t2];
    nibo[t1+1]='\0';
    t2--;
   }
   zhan2[++t2]=a[i];
   i++;
  }

 }

 while(t2>0)

 {
  nibo[++t1]=zhan2[t2];
  nibo[t1+1]='\0';
  t2--;

 }


 j=1;t3=0;

 while(j<=t1)

 {
  if(nibo[j]>='0'&&nibo[j]!='^'&&nibo[j]!='#')//
  {
   for(i=1;i<=shu->top;i++)
   {
    if((int)(nibo[j]-'0')==shu->data[i].d2)
    {
     m=i;
     break;
    }
   }
   zhan3[++t3]=shu->data[m].d1;
  

  }
  else if(nibo[j]=='+')
  {
   zhan3[t3-1]=zhan3[t3-1]+zhan3[t3];
   t3--;
  

  }
  else if(nibo[j]=='-')
  {
   zhan3[t3-1]=zhan3[t3-1]-zhan3[t3];
   t3--;
  }
  else if(nibo[j]=='*')
  {
   zhan3[t3-1]=zhan3[t3-1]*zhan3[t3];
   t3--;
  }
  else if(nibo[j]=='/')
  {
   zhan3[t3-1]=zhan3[t3-1]/zhan3[t3];
   t3--;
  }
  else if(nibo[j]=='^')
  {
   zhan3[t3-1]=pow(zhan3[t3-1],zhan3[t3]);
   t3--;
  }
  else if(nibo[j]=='#')
  {
   zhan3[t3]=sqrt(zhan3[t3]);
  }
  j++;

 


 }


 return zhan3[t3];


}
void main()
{

 for(;;)

 {

 char x,a[50];

 double jieguo;

 int i=0;

 a[0]='$';

 printf("#表示开方,^表示乘方(支持负数)\n");
    printf("请输入表达式,退出请输入q:\n\n");
    scanf("%c",&x);

 if(x=='q') break;

 while(x!='\n')

 {
  a[++i]=x;
  scanf("%c",&x);

 }

 a[i+1]='\0';

 jieguo=jisuan(a);
    printf("\n");
    printf("结果为:%lf",jieguo);

 printf("\n\n\n\n\n");

 }
}
2011-04-30 15:57
lp270136977
Rank: 1
等 级:新手上路
帖 子:6
专家分:5
注 册:2011-4-30
收藏
得分:0 
haoniucha
2011-04-30 20:06
快速回复:请教一个编程的问题。
数据加载中...
 
   



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

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