1:将所需输入的数据以字符数组的形式输入,建立字符数组,建立相应的整数数组,然后一一映射,以此来实现数据的输入,需要注意的是,当实现字符向数字映射时,应该减去相应的ASCII偏移值,即48。
2:为了模拟我们在纸上手算的进位模拟运算,我们将字符数组反向填入整数数组,上图的后几行代码实现了这个 *** 作。
3:实现进位加法,这是整个代码的核心部分,需要读者细细体会,认真揣摩,往往需要反复思考,容易遗忘
4:反向输出数据。因为我们的加法是将数组反置,然后由左到右想加的,加完后,个数位在左边,所以,需要反向输出
以下是全部代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char a1[100],b1[100];
int a[100],b[100],c[100];
int a1_len,b1_len,lenc,i,x;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
gets(a1);
gets(b1); //输入加数与被加数
a1_len=strlen(a1);
b1_len=strlen(b1);
for (i=0;i<=a1_len-1;i++)
{
a[a1_len-i]=a1[i]-48; //将 *** 作数放入a数组 }
for (i=0;i<=b1_len-1;i++)
{
b[b1_len-i]=b1[i]-48; //将 *** 作数放入b数组 }
lenc =1;
x=0;
while(lenc <=a1_len || lenc <=b1_len)
{
c[lenc]=a[lenc]+b[lenc]+x; //两数相加
x=c[lenc]/10; //要进的位
c[lenc]=c[lenc]%10; //进位后的数
lenc++; //数组下标加1 }
c[lenc]=x;
if (c[lenc]==0)
{
lenc--; //处理最高进位 }
for (i=lenc;i>=1;i--)
{
cout<<c[i]; //输出结果 }
cout<<endl;
return 0;
}
一、如果待开方数字为a,次数为b, *** 作方法如下:
输入a,找到表示x的y次方的按键按钮并点击,输入b,点击倒数键,按下等号键即可。
二、计算器开根号的方法:
1、在计算器中输入要开根号的数字,点击根号键按钮,即可开根;
2、打开手机计算器,如果显示的是普通的计算器,将手机旋转过来,输入要开根的数字,点击根号键按钮,即可开根;
3、点击电脑左下角按钮,点击所有应用,选择计算器,打开计算器后,若显示的为标准,则点击标准旁边的按钮,点击科学,输入
先把数学问题描述清楚,你里边有 n 吗? 你求谁?
“新生成的数和前后数开根” 这什么意思呀? 和你前边 算式描述的一致吗?
a 1
b 9
c sqrt(19)
d1 d2
sqrt(ca) sqrt(cb)
d3 d4
sqrt(d2a) sqrt(d3b)
d5 d6
sqrt(d4a) sqrt(d5b)
d(2n+1) d(2n+2)
sqrt(d2n a) sqrt(d(2n+1) b)
是不是这样的
========
#include <mathh>
#include <iostreamh>
double A;
double B;
double fun(int n,double arr)
{
double an;
double E;
int i=1;
while(i<=n){
E=(i%2)A;B;
arr[i]=sqrt(arr[i-1]E]);
i++;
}
return arr[n];
}
int man()
{
int n;
cin>>A>>B;
cin>>n;
double D;
D=new double[n+1];
D[0]=sqrt(AB); // C=sqrt(AB)
fun(n,Arr);
int m=0;
do {
cout<<D[m]<<endl;m++;
}while(m<=n);
}
如果 你用的 是 C 编译 器 只需要把
#include <iostreamh> 改成 #include <stdioh>
输入输出 cin>> cout<< 改用 scanf 和printf
============================================
你的问题出在数学描述上,只要能把数学模型描述清楚实现起来很容易。
你补充描述中 d3=sqrt(ad1),d4=sqrt(d1c),d5=sqrt(cd2),d6=aqrt(d2b) 还是没有看出规律 有没有打错?
看是不是这样:
a 1 = d(-2)
b 9 = d(-1)
c sqrt(19) = d0
d1 d2 k=0
sqrt(d0d(-2)) sqrt(d0d(-1))
d3 d4 k=1
sqrt(d1d(-1)) sqrt(d1d0)
d5 d6 k=2
sqrt(d2d0) sqrt(d2d1)
d7 d8 k=3
sqrt(d3d1) sqrt(d3d2)
d(2k+1) d(2k+2) k
sqrt(dk d(k-2)) sqrt(dk d(k-1))
是不是这样的
========================================================
终于搞明白你的意思了
下面的程序通过了测试
运行结果::
please input a , b & n :1 100 3
0 1
3 177828
2 316228
3 562341
1 10
3 177828
2 316228
3 562341
0 100
说明
a--0 b--0 初始端点
c--1 第一次插值点
d--2 第二次插值点
e--3 第三次插值点
f--
#include <iostreamh>
#include <mathh>
class List { //用链表数据结构来实现
public:
float data; //节点的值
int lev; //节点的级别
List next;
List prev;
List(){next=NULL;prev=NULL;lev=0;};
List(float a,int m){data=a;next=NULL;prev=NULL;lev=m;}
void setdata(float a){data=a;};
void insert(List nod); //链表插入节点
void add(List nod); //添加节点
};
void List::add(List nod)
{
List p=this;
while((p->next)!=NULL){
p=p->next;
}
p->next=nod;
nod->prev=p;
}
void List::insert(List nod)
{
List p;
p=next;
next=nod;
nod->prev=this;
List p1=nod;
while((p1->next)!=NULL){
p1=p1->next;
}
p1->next=p;
}
int main()
{
float a,b;
int m,n;
cout<<"please input a , b & n :";
cin>>a>>b>>n;
List list, tmp, p,q;
list= new List(a,0);
tmp = new List(b,0);
list->add(tmp);
m=1;
while(m<=n){ //第 m 次 插值
p=list;
while((p->next)!=NULL){ //连中每两个节点之间插入一个节点
//值为前后两节点积平方根
tmp=new List(sqrt((p->data)(p->next->data)),m);
//申请节点,计算节点值
q=p->next;;
p->insert(tmp); //插入节点
p=q;
}
m++; //下一次
}
p=list;
while(p){
cout<<p->lev<<"\t"<<p->data<<endl;
p=p->next;
}
}
将根号a赋值给变量b的程序代码编写步骤如下:
1、启动DEVc应用程序进入后选择文件——新建源代码选项进行创建文件。
2、输入头文件数学函数和main函数,定义两个double类型的变量,a和b,给a赋值为9。
3、求a的根,输入代码“b等号sqrta”,将a开根赋值给b,并用printf将b输出。
4、编译运行查看结果,编写结束。
#include<stdioh>
#include<mathh>
void main()
{
double a=25,s;
s=sqrt(a);
printf("s=%2lf\n",s);
}
sqrt的原型:double sqrt(double x),输出格式是%lf,你在看看
简单办法,转double, 再开方。
你的编译器要能全面支持64位无符号整型才行。例如支持 强制转化 unsigned _int64 为 double
#include<stdioh>
#include<mathh>
int main(void){
// unsigned _int64 x; // 我的编译器支持 支持unsigned
signed _int64 x;
double y;
printf("input x in hex 0x100:\n");
scanf("%I64x", &x); // 按16进制格式输入。
printf("x=%I64d\n", x); // 按10进制格式输出。
y = (double) x; // 我的编译器支持 signed _int64 转double, 不支持unsigned 转double
printf("y=%lf\n",sqrt(y)); // 开平方
return 0;
}
-----
scanf("%I64d", &x); // 按10进制格式输入。
============
实际上,double 只有 52 bits 精度,unsigned _int64 会有截断误差。
而 mathh 的sqrt 不支持 unsigned _int64。
也许可以自己编一个迭代 程序,假定 unsigned _int64 y 是平方根,用
(x - y y ) 趋进 0 的方法 迭代 出 y -- 好像不难。达到 y 精度 为 1。
下面是设想,尚无时间验证:
#include<stdioh>
#include<limitsh>
#include<mathh>
int main(void){
unsigned _int64 x,y,y1,y2;
signed _int64 xs;
double z;
printf("max signed _int64 is %I64x\n", _I64_MAX);
printf("max unsigned _int64 is %I64x\n", _UI64_MAX);
printf("input x in hex 0x100:\n");
scanf("%I64x", &x);
printf("x=%I64x\n", x);
if (x <= _I64_MAX){
xs = x;
z = (double) xs;
printf("y=%lf\n",sqrt(z));
} else {
for (y=0;y< 0xffffffff;y=y+0xff) {
if (yy <= x) y1=y;
if (y y > x) {y2=y; break;}
}
for (y=y1;y<=y2;y=y++) {
if (yy <= x) y1=y;
if (yy > x) {y2=y; break;}
}
printf("y1=%I64x y2=%I64x\n",y1,y2); // 输出
}
return 0;
}
输入数小于0x7fffffffffffffff 用 double
大于 0x7fffffffffffffff 用 yy -x
输入输出 用 16 进制数。
以上就是关于高精开根用C++怎么办全部的内容,包括:高精开根用C++怎么办、oppo手机计算器如何开多次方根、C语言编程求c=sqrt(a*b),d=sqrt(a*c),d2=sqrt(c*b),即新生成的数和前后数开根,依次类推n次等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)