1. 程式人生 > >1024 Palindromic Number (25 分)(高精度加法)

1024 Palindromic Number (25 分)(高精度加法)

水題一次過,按照題目要求模擬就行。 string又有些不熟練了。 在string某一位置插入一個字元或者字串相關函式複習:

 iterator insert( iterator i, const char &ch );
  basic_string &insert( size_type index, const basic_string &str );
  basic_string &insert( size_type index, const char *str );
  basic_string &insert( size_type index1, const basic_string &str, size_type index2, size_type num );
  basic_string &insert( size_type index, const char *str, size_type num );
  basic_string &insert( size_type index, size_type num, char ch );
  void insert( iterator i, size_type num, const char &ch );
  void insert( iterator i, iterator start, iterator end );

 

insert()函式的功能非常多: 

在迭代器i表示的位置前面插入一個字元ch, 
在字串的位置index插入字串str, 
在字串的位置index插入字串str的子串(從index2開始,長num個字元), 
在字串的位置index插入字串str的num個字元, 
在字串的位置index插入num個字元ch的拷貝, 
在迭代器i表示的位置前面插入num個字元ch的拷貝, 
在迭代器i表示的位置前面插入一段字元,從start開始,以end結束. 

#include <cstdio>
#include <iostream>
#include <set>
#include <vector> 
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;

string n, temp;

int k, l, step;

bool check(){
	for (int i = 0; i<=l/2+1; i++)
		if (n[i] != n[l-i-1]) return false;
	
	return true;
}

void change(){
	l = n.length();
	int jin = 0, m = 0;
	for (int j = l-1; j>=0; j--){
		m = (n[j]-'0' + n[l-j-1] -'0');
		m += jin;
		temp[j] = m%10 + '0';
		jin = m/10;
	}
	if (jin) {
		char c = jin + '0';
		temp.insert(0, 1, c);
	}
	n = temp;
	step++;
}

int main()
{
	cin >> n >> k;
	temp = n;
	l = n.length();
	
	while(!check() && step<k){
		change();
		
	}
	cout << n << endl << step;
	return 0;
}