上海展台设计搭建seo关键词排名优化推荐
注意:此次初看像一道大整数的除法题,仔细分析是一道字符串存储输入数据的题。
思路:
1、用字符串存储所谓的输入整数,之后依次从字符串的第一位开始读取数据,每次读取一位,模拟除法的执行过程。
2、除法时,会有临时的被除数,分为临时被除数小于除数和大于除数两种情况。两种情况得到的商和余数不一样,需要分类计算。对于被除数小于除数时,可能此时用户输入的被除数只有一位,直接可以得出结果。
#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
using namespace std;//法一:边模拟计算,边输出
void divideOne(){string num; int b,r,temp; //b为除数,temp为中间的被除数 r = 0; //r余数,必须初始化为0 cin >> num >> b;int len = num.length();for(int i=0; i<len; ++i){temp = r*10 + (num[i] - '0'); //得到当前过程的被除数if(temp >= b){ //够除 cout << temp/b; //输出商 r = temp%b; //更新余数 }else { //不够除 if (len==1){ //被除数只有一位cout << "0";r = num[i] - '0'; break;}if(i>0) //不是第一位,商为0 cout << 0; r = temp; } }cout << " " << r << endl;
} //法二:将结果保存到字符串中
void divideTwo(){char num[10001];char res[10001] = {0};int b,r,temp;int index = 0; //res的下标索引 r = 0;scanf("%s %d",num,&b);int len = strlen(num);for(int i=0; i<len; ++i){temp = r*10 + (num[i]- 48); //'0'对应的ASCII码是48,字符转化为数字 if(temp>=b){res[index++] = temp/b + '0'; //数字转为字符 r = temp%b;} else{if(len==1){res[index++] = '0';r = num[0] - 48;break;}if (i)res[index++] = '0';r = temp;}}printf("%s %d\n",res,r);
}
int main(){divideOne();divideTwo();return 0;
}