编程 语言 c语言-C语言编程 加减乘除。。。

问题描述

C语言编程 加减乘除。。。

有这样一道题,现在由于精度问题,数字加减会有误差,现要编辑一个程序,使得输入数字无误差,并给定长度在规定字符串数组(30),求加法(包含小数

解决方案

shell数值计算(加减乘除)

解决方案二:

我是来围观的我是来围观的我是来围观的

解决方案三:

#include
#include
#include
using namespace std;

void main()
{
char ch[ 30 ];
memset( ch, '?', 30 );
cin>>ch;
char symbol;
callback:
cin>>symbol;
if( symbol != '+' )
{
cout << "算术仅限加法,请重新输入运算符:"<
goto callback;
}
char ch_1[ 30 ];
memset( ch_1, '?', 30 );
cin>>ch_1;
char c = 0;
int uIndex = 0;
int uFloatIndex = 0;
bool b1Float = false, b2Float = false;
while( c != '.' && uIndex < 30 && c != '?' )
{
c = ch[ uIndex ];
uIndex++;
}
if( c == '.' )
{
b1Float = true;
uIndex--;
uFloatIndex = uIndex;
uIndex --;
char cc = 0;
int indexc = 0;
while( indexc < 30 && cc != '?' )
{
cc = ch[ indexc ];
indexc++;
}
ch[ indexc - 2] = '?';
}
else
{
uIndex -=2;
ch[ uIndex ] = '?';
uIndex--;
c = ch[ uIndex ];
}

char c1 = 0;
int uIndex1 = 0;
int uFloatIndex1 = 0;
while( c1 != '.' && uIndex1 < 30 && c1 != '?' )
{
    c1 = ch_1[ uIndex1 ];
    uIndex1++;
}
if( c1 == '.' )
{
    b2Float = true;
    uIndex1--;
    uFloatIndex1 = uIndex1;
    uIndex1--;
    char c11 = 0;
    int index11 = 0;
    while( index11 < 30 && c11 != '?' )
    {
        c11 = ch_1[ index11 ];
        index11++;
    }
    ch_1[ index11 - 2 ] = '?';
}
else
{
    uIndex1-= 2;
    ch_1[ uIndex1 ] = '?';
    uIndex1--;
    c1 = ch_1[ uIndex1 ];
}

stringstream sstream;
int carry = 0;
int remainder = 0;
string addRet = "";
vector< int >array1, array2;
int tmpIndex = uFloatIndex + 1, tmpIndex1 = uFloatIndex1 + 1;
int normalIndex = 0;
if( b1Float && b2Float )
{
    int indexCount = 0;
    while( true )
    {
        if( ch[ tmpIndex ] != '?' )
        {
            tmpIndex++;
        }
        else
        {
            normalIndex = indexCount;
            break;
        }
        if( ch_1[ tmpIndex1 ] != '?' )
        {
            tmpIndex1++;
        }
        else
        {
            tmpIndex--;
            normalIndex = indexCount;
            break;
        }
        indexCount++;
    }
    if( ch[ tmpIndex ] != '?' )
    {
        while( ch[ tmpIndex ] != '?' )
        {
            int value = 0;
            sstream << ch[ tmpIndex ];
            sstream >> value;
            sstream.clear();
            array2.push_back( value );
            tmpIndex++;
        }
    }
    else
    {
        while( ch_1[ tmpIndex1 ] != '?' )
        {
            int value = 0;
            sstream << ch_1[ tmpIndex1 ];
            sstream >> value;
            sstream.clear();
            array2.push_back( value );
            tmpIndex1++;
        }
    }
    int tpIndex = uFloatIndex + normalIndex, tpIndex1 = uFloatIndex1 + normalIndex;
    while( true )
    {
        /*if( normalIndex == 0 )
        {
            break;
        }*/
        int value1 = 0, value2 = 0;
        if( tpIndex != uFloatIndex )
        {
            sstream << ch[ tpIndex ];
            sstream >>value1;
            sstream.clear();
            tpIndex--;
        }
        else
        {
            break;
        }

        if( tpIndex1 != uFloatIndex1 )
        {
            sstream << ch_1[ tpIndex1 ];
            sstream >> value2;
            sstream.clear();
            tpIndex1--;
        }
        else
        {
            break;
        }

        int ret = value1 + value2;
        ret += carry;
        if( ret >= 10 )
        {
            carry = ret / 10;
            remainder = ret % 10;
        }
        else
        {
            carry = 0;
            remainder = ret;
        }
        array2.push_back( remainder );
        //normalIndex--;
    }

}
else if( ( b1Float && !b2Float ) || ( !b1Float && b2Float ) )
{
    if( b1Float && !b2Float )
    {
        while( ch[ tmpIndex ] != '?' )
        {
            int value = 0;
            sstream << ch[ tmpIndex ];
            sstream >> value;
            sstream.clear();
            array2.push_back( value );
            tmpIndex++;
        }
    }
    else
    {
        while( ch_1[ tmpIndex1 ] != '?' )
        {
            int value = 0;
            sstream << ch_1[ tmpIndex1 ];
            sstream >> value;
            sstream.clear();
            array2.push_back( value );
            tmpIndex1++;
        }
    }
}

while( true )
{
    if( uIndex == -1 && uIndex1 == -1 )
    {
        break;
    }
    int value1 = 0, value2 = 0;
    if( uIndex >= 0 )
    {
        sstream << ch[ uIndex ];
        sstream >>value1;
        sstream.clear();
    }
    if( uIndex >= 0 )
    {
        uIndex--;
    }
    if( uIndex1 >= 0 )
    {
        sstream << ch_1[ uIndex1 ];
        sstream >> value2;
        sstream.clear();
    }
    if( uIndex1 >= 0 )
    {
        uIndex1--;
    }
    int ret = value1 + value2;
    ret += carry;
    if( ret >= 10 )
    {
        carry = ret / 10;
        remainder = ret % 10;
    }
    else
    {
        carry = 0;
        remainder = ret;
    }
    array1.push_back( remainder );
}

string calculateRet;
int arrayIndex = 0;
while( true )
{
    if( array1.empty() )
    {
        break;
    }
    string tmp = "";
    sstream << array1.back();
    sstream >> tmp;
    sstream.clear();
    calculateRet += tmp;
    array1.pop_back();
}
arrayIndex = 0;
if( !array2.empty() )
{
    calculateRet += ".";
    while( true )
    {
        if( array2.empty() )
        {
            break;
        }
        string tmp = "";
        sstream << array2.back();
        sstream >> tmp;
        sstream.clear();

        calculateRet += tmp;
        array2.pop_back();
    }
}
cout << "="<<endl<< calculateRet.c_str() <<endl;
system( "pause" );

}

/////////////////////////////////////////////////////////////////
//输入第一个数后按回车,然后再输入+号按回车,最后输入第二个数按回车。
//代码没有整理,勿怪,希望能帮到你。

解决方案四:

头文件需要加sstream、vector、iostream

时间: 2024-11-06 07:47:53

编程 语言 c语言-C语言编程 加减乘除。。。的相关文章

C语言控制台窗口图形界面编程之四 常用的文本输出函数

文本颜色属性已经学会了,那么下面就学习几个比较常用的文本输出函数,如下: BOOL FillConsoleOutputAttribute( // 填充字符属性 HANDLE hConsoleOutput, // 句柄 WORD wAttribute, // 文本属性 DWORD nLength, // 个数 COORD dwWriteCoord, // 开始位置 LPDWORD lpNumberOfAttrsWritten // 返回填充的个数 ); BOOL FillConsoleOutput

C语言控制台窗口图形界面编程之一

本系列文章改编自<C语言控制台窗口界面编程(修正版)>.本系列文章会抛弃一些原文中难懂难理解且不常用的部分,并修改了部分样例程序.只为了更加清晰地学习C语言的控制台窗口界面编程.而想要更加深入的了解本系列文章,请阅读<C语言控制台窗口界面编程(修正版)>. <C语言控制台窗口界面编程(修正版)>下载地址:http://download.csdn.net/detail/jzqt_t/7471013 在Windows操作系统下用C语言编写控制台的窗口界面首先要获取当前标准输

可编程渲染管线与着色器语言

Programming pipeline & shading language 大家好,今天想给大家介绍一下可编程渲染管线和着色器语言的相关基础知识,使想上手SHADER编程的童鞋们可以快速揭开SHADER语言的神秘面纱 由于时间有限,我决定只讲三个主要方面的内容,其过程中肯定会有不详细之处,还请见谅,就算是抛砖引玉,给大家一个简单的入门引路. 本章内容总共分为三个部分 一.3D渲染管线工作流程 二.可编程管线 三.着色器语言 3D渲染管线作为整个工作流程的基础,是不可或缺的基本知识.因此,作一

c语言编程-java题目和C语言题目,面试题目,急用

问题描述 java题目和C语言题目,面试题目,急用 竞赛编程题目"> 解决方案 c语言面试题目C语言面试题目关于C语言的题目 解决方案二: 这么多,,,还是找同学助攻吧 解决方案三: 这么多,,,还是找同学助攻吧 解决方案四: 都看不清,兄弟,你这都不会,到时工作也没法进行啊 解决方案五: 参考一下这个去找找 http://www.doc88.com/p-3601057756733.html 解决方案六: 2015Java软件开发工程师面试题宝典 几百道常用题及答案 http://www.

开发-用面向对象的语言进行面向过程的编程

问题描述 用面向对象的语言进行面向过程的编程 教研室的项目多为开发MIS,开发过程中采用 结构化的开发方法(结构化的分析+结构化的设计),但是编程却采用.Net平台,使用C#语言,C#语言是一种纯的面向对象的语言呀,在定义类的时候,我们程序员都是自己根据自己的感觉去定义.这样会不会有不妥的地方呀? 解决方案 面向对象的语言天生也是面向过程的语言. 如果你用C#,完全可以定义一个类,然后将所有方法都定义在里面,这样就特异化成了面向过程了. 解决方案二: 所谓特异化,好比等边三角形是正多边形的特例.

《嵌入式C编程:PIC单片机和C编程技术与应用》一第1章C语言概述和程序结构1.1 C源代码

本节书摘来自华章出版社<嵌入式C编程:PIC单片机和C编程技术与应用>一书中的第1章,第1.1节,作者 [美]马克·西格斯蒙德(Mark Siegesmund),更多章节内容可以访问"华章计算机"公众号查看 第1章 Embedded C Programming: Techniques and Applications of C and PIC MCUS C语言概述和程序结构 1.1 C源代码 下面是一段C语言源代码: 这段代码初看起来可能会觉得难以理解,但读完本书并完成书中

C语言字符串处理类型的编程问题

问题描述 C语言字符串处理类型的编程问题 题目要求使用C语言编译程序. 解决方案 #include char* Replace(char* str,char* substr,char*newstr) { unsigned short strLen,substrLen,newstrLen; strLen=strlen(str); substrLen=strlen(substr); newstrLen=strlen(newstr); static char res[100]; memset(res,

Linux下C语言实现C/S模式编程_C 语言

由标题可知,这篇文章主要讲如何用C语言实现一个C/S模式的程序. 主要功能:时间回送. 客户机发出请求,服务器响应时间,并返回服务器时间,与客户机进行同步. 废话不多说,下面直接贴出源代码. 代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <time.h> #

java-Java语言程序设计第4章编程练习题1求问

问题描述 Java语言程序设计第4章编程练习题1求问 import java.util.Scanner; public class Practice { public static void main(String[] args) { Scanner input = new Scanner(System.in); int data = 0; int positive = 0; int negative = 0; int sum = 0; int count = 0; System.out.pri

《面向ArcGIS的Python脚本编程》——1.3 脚本语言和程序语言

1.3 脚本语言和程序语言 面向ArcGIS的Python脚本编程Python作为一门程序语言,也常被称为脚本语言.那么,两者的区别在哪里呢?一般而言,脚本语言用于控制其他应用程序以实现任务自动化:而程序语言则是用于开发结构复杂.功能完备的应用程序.脚本语言是一种"粘合剂",它可以将不同的组件组合在一起,从而实现新的功能.而系统语言既可以从头构建组件,也可以将组件组装成不同的应用程序.系统语言(例如C++和.NET)通过计算机的低级图元和原始资源从头开始创建应用程序.脚本语言(例如Py