您现在的位置是:主页 > news > 常州建设局网站打不开/时事新闻热点摘抄
常州建设局网站打不开/时事新闻热点摘抄
admin2025/4/28 22:42:31【news】
简介常州建设局网站打不开,时事新闻热点摘抄,淮南网备案查询,网站群建设代理强烈推荐,刷PTA的朋友都认识一下柳神–PTA解法大佬 本文由参考于柳神博客写成 柳神的CSDN博客,这个可以搜索文章 柳神的个人博客,这个没有广告,但是不能搜索 文章目录题目原文输入格式:输出格式:输入样例:输出样例:思路如下&am…
强烈推荐,刷PTA的朋友都认识一下柳神–PTA解法大佬
本文由参考于柳神博客写成
柳神的CSDN博客,这个可以搜索文章
柳神的个人博客,这个没有广告,但是不能搜索
文章目录
- 题目原文
- 输入格式:
- 输出格式:
- 输入样例:
- 输出样例:
- 思路如下:
- 代码如下:
- 欣赏时间.
- 结尾
题目原文
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
思路如下:
创建一个结构体,用来保存这个高精度数.
typedef struct node {int x[1000];int len;//构造函数node() {memset(x, 0, sizeof(x));len = 0;}
}Number;
memset就是数组的初始化函数.把全部的x都初始化位0
方便计算.
每一位都是按照相应的顺序的.
如果是加减和乘建议逆序保存
就是 12345
数组里面的是 54321
如果是除法建议正序保存.除法比较特殊.
然后就是我们的计算了.
用一个余数r来计算.
能除就出去,然后替换新的余数r.
不能就继续保留余数r
举个例子.
12789/78
1可以去78吗? 不能 保留 c的这一位是0
12 可以吗? 不能 保留 c的这意味是0 余数现在是12
127可以吗 可以 c 的这一位是1 余数现在是49
一次循环直到最后.
代码如下:
#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
//大数字的结构体
typedef struct node {int x[1000];int len;//构造函数node() {memset(x, 0, sizeof(x));len = 0;}
}Number;
// 读入大数字
Number scan(Number,string );
Number divide(Number , int,int &);
int main(void) {Number a;int b;string sa;cin >> sa>>b;a = scan(a, sa);int r = 0;a = divide(a, b, r);for (int i = a.len-1; i >= 0; --i) {cout << a.x[i] ;}cout << " " << r;return 0;
}//读入高精度数
Number scan(Number a,string b) {a.len = b.length();int lenth = b.length()-1;for (auto i: b) {a.x[lenth] = i - '0';lenth--;}return a;
}
Number divide(Number a, int b,int &rmd) {Number c;c.len = a.len;for (int i = a.len - 1; i >= 0; i--) {rmd = rmd * 10 + a.x[i]; //和上一位遗留的余数组合if (rmd < b)c.x[i] = 0; //不够除,该位为0else { //够除c.x[i] = rmd / b; //商rmd= rmd % b;}}while (c.len - 1 >= 1 && c.x[c.len - 1] == 0) {c.len--; //去除高位的0,同时至少保留一位最低位.}return c;
}
我的代码是copy算法笔记的.
国际惯例,柳神的代码的
欣赏时间.
#include <iostream>
using namespace std;
int main() {string s;int a, t = 0, temp = 0;cin >> s >> a;int len = s.length();t = (s[0] - '0') / a;//为了防止,高精度数是一个个位数.if ((t != 0 && len > 1) || len == 1)cout << t;temp = (s[0] - '0') % a;for (int i = 1; i < len; i++) {t = (temp * 10 + s[i] - '0') / a;cout << t;temp = (temp * 10 + s[i] - '0') % a;}cout << " " << temp;return 0;
}
结尾
如果这篇文章对你有张帮助的话,可以用你高贵的小手给我点一个免费的赞吗
相信我,你也能变成光.
如果你有任何建议,或者是发现了我的错误,欢迎评论留言指出.