1082. Read Number in Chinese


题意:

1 按中文的发音规则 九位(个节,万节,亿节) 除个节外每节的末尾要视情况输出万或者亿。

2 如果在数字的某节中,某个非零位的高位是零,那么该非零位的发音前额外加一个零。


思路:

1.将数字按字符串方式处理, 声明一个char型数组 因为题目说不会超过九位,算上符号位 我们定义一个长度15的防止溢出

gets读入  别忘了获取长度

要先判断第一位 如果str[0]是负数 那么输出“-”,左边开始的索引往后移一位。所以得先设置下标left right处理数字的每一个节的输入输出。left指向当前输入的位数,right指向与left同节的个位。


怎么让left和right指向一个节呢?

首先 left初值赋0,若有负号,则往前加一位,让他永远指向每节的首位只需要不断加4就行

对于right 初值为len-1 即末尾处,让right不断减4,减到不超过left+4的时候就好

(我不是很明白 为啥不能直接等于left+4,然后不超过len就好,明天试试)

2.设置bool变量记录当前是否有零,输出left指向的位之前先判断该位是否为0,如果为0,则令flag为true,表示存在累积的0,如果非0,则根据flag的值判断是否需要输出额外的零。在这之后,就可以输出该位本身以及该位对应的位号(十、百、千)。当整个一小节处理完毕之后的话,再输出万或亿。


注意;

1. 如果万节所有位都为0,那么不应该输出多余的0。 800000008 读作八亿零八,不加万。

0   //ling

8   //ba

8 0808 0808    //ba yi ling ba bai ling ba wan ling ba bai ling ba 八亿零八百零八万零八百零八

-8 8080 8080  //fu ba yi ba qian ling ba shi wan ba qian ling ba shi  负八亿八千零捌拾万八千零八十

8 0000 0008   //ba yi ling ba

8 0000 0000  //ba yi

8000 0008 //ba qian wan ling ba 八千万零八

8000 8000  //ba qian wan ba qian 八千万八千

8000 0000  //ba qian wan  八千万

import sys import os import tempfile import subprocess import time from PyQt5.QtWidgets import ( QApplication, QMainWindow, QPushButton, QTextEdit, QFileDialog, QVBoxLayout, QWidget, QStatusBar, QProgressDialog ) from PyQt5.QtCore import Qt from docx import Document from docx.oxml import parse_xml from docx.oxml.ns import nsdecls, qn from docx.text.paragraph import Paragraph class DocumentReaderApp(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("文档阅读器") self.setGeometry(100, 100, 800, 600) # 主布局 main_widget = QWidget() self.setCentralWidget(main_widget) layout = QVBoxLayout(main_widget) # 选择文件按钮 self.btn_open = QPushButton("选择文件") self.btn_open.clicked.connect(self.open_file) layout.addWidget(self.btn_open) # 文本显示区域 self.text_edit = QTextEdit() self.text_edit.setReadOnly(True) layout.addWidget(self.text_edit) # 状态栏 self.status_bar = QStatusBar() self.setStatusBar(self.status_bar) self.status_bar.showMessage("就绪") # 检查LibreOffice是否安装 self.libreoffice_path = self.find_libreoffice() if not self.libreoffice_path: self.status_bar.showMessage("警告: 未找到LibreOffice,DOC/WPS文件转换功能不可用") def find_libreoffice(self): """查找系统中安装的LibreOffice""" # Windows路径 windows_paths = [ r"C:\Program Files\LibreOffice\program\soffice.exe", r"C:\Program Files (x86)\LibreOffice\program\soffice.exe" ] # Linux路径 linux_paths = [ "/usr/bin/libreoffice", "/usr/bin/soffice", "/snap/bin/libreoffice" ] # 检查路径是否存在 paths = windows_paths if sys.platform == "win32" else linux_paths for path in paths: if os.path.exists(path): return path # 尝试通过PATH查找 try: if sys.platform == "win32": result = subprocess.run(["where", "soffice"], capture_output=True, text=True) else: result = subprocess.run(["which", "soffice"], capture_output=True, text=True) if result.returncode == 0 and os.path.exists(result.stdout.strip()): return result.stdout.strip() except: pass return None def open_file(self): """打开文件对话框并读取内容""" file_path, _ = QFileDialog.getOpenFileName( self, "选择文档", "", "文档文件 (*.docx *.doc *.wps);;所有文件 (*.*)" ) if not file_path: return self.status_bar.showMessage(f"正在处理: {os.path.basename(file_path)}...") QApplication.processEvents() # 更新UI try: text = self.read_document(file_path) self.text_edit.setText(text) self.status_bar.showMessage(f"成功读取: {os.path.basename(file_path)}") except Exception as e: self.text_edit.setText(f"错误: {str(e)}") self.status_bar.showMessage(f"读取失败: {os.path.basename(file_path)}") def read_document(self, file_path): """根据文件类型选择读取方法""" ext = os.path.splitext(file_path)[1].lower() if ext == '.docx': return self.read_docx_with_numbering(file_path) elif ext in ('.doc', '.wps'): if not self.libreoffice_path: raise RuntimeError("未安装LibreOffice,无法转换DOC/WPS文件") # 显示进度对话框 progress = QProgressDialog("正在转换文件...", "取消", 0, 0, self) progress.setWindowTitle("文档转换") progress.setWindowModality(Qt.WindowModal) progress.setCancelButton(None) # 禁用取消按钮 progress.show() QApplication.processEvents() # 转换文件 converted_file = self.convert_to_docx(file_path) # 关闭进度对话框 progress.close() # 读取转换后的文件 return self.read_docx_with_numbering(converted_file) else: raise ValueError("不支持的格式") def convert_to_docx(self, file_path): """使用LibreOffice将文件转换为DOCX格式""" # 创建临时目录 temp_dir = tempfile.mkdtemp() try: # 构建转换命令 cmd = [ self.libreoffice_path, "--headless", # 无界面模式 "--convert-to", "docx", # 转换为docx "--outdir", temp_dir, # 输出目录 file_path # 输入文件 ] # 执行转换 result = subprocess.run( cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=60 # 超时60秒 ) if result.returncode != 0: error_msg = result.stderr.decode('utf-8', errors='ignore') raise RuntimeError(f"文件转换失败: {error_msg}") # 查找转换后的文件 base_name = os.path.splitext(os.path.basename(file_path))[0] converted_path = os.path.join(temp_dir, f"{base_name}.docx") if not os.path.exists(converted_path): raise RuntimeError("转换后的文件未找到") return converted_path except subprocess.TimeoutExpired: raise RuntimeError("文件转换超时") except Exception as e: raise RuntimeError(f"转换过程中出错: {str(e)}") def read_docx_with_numbering(self, file_path): """读取.docx文件并正确处理编号""" try: doc = Document(file_path) text_list = [] numbering_dict = {} list_counter = {} # 用于跟踪每个列表的计数器 # 获取文档中的所有编号定义 if doc.part.numbering_part: numbering_part = doc.part.numbering_part.numbering_definitions._numbering for num in numbering_part.findall('.//w:num', namespaces=numbering_part.nsmap): num_id = num.get(qn('w:numId')) abstract_num_id = num.find('.//w:abstractNumId', namespaces=num.nsmap).get(qn('w:val')) # 查找对应的抽象编号定义 abstract_num = numbering_part.find(f'.//w:abstractNum[@w:abstractNumId="{abstract_num_id}"]', namespaces=numbering_part.nsmap) if abstract_num: levels = {} for lvl in abstract_num.findall('.//w:lvl', namespaces=abstract_num.nsmap): ilvl = lvl.get(qn('w:ilvl')) num_fmt = lvl.find('.//w:numFmt', namespaces=lvl.nsmap).get(qn('w:val')) levels[ilvl] = num_fmt numbering_dict[num_id] = levels # 遍历文档中的所有段落 for para in doc.paragraphs: p = para._p # 获取底层XML元素 # 检查段落是否有编号 num_pr = p.find('.//w:pPr/w:numPr', namespaces=p.nsmap) if num_pr: num_id = num_pr.find('.//w:numId', namespaces=num_pr.nsmap).get(qn('w:val')) ilvl = num_pr.find('.//w:ilvl', namespaces=num_pr.nsmap).get(qn('w:val')) # 获取编号格式 num_fmt = numbering_dict.get(num_id, {}).get(ilvl, 'decimal') # 为这个编号列表创建计数器 counter_key = f"{num_id}_{ilvl}" if counter_key not in list_counter: list_counter[counter_key] = 0 list_counter[counter_key] += 1 # 根据格式生成编号前缀 prefix = self.get_number_prefix(num_fmt, list_counter[counter_key]) text_list.append(f"{prefix} {para.text}") else: # 没有编号的段落 text_list.append(para.text) # 如果是临时文件,读取后删除 if "tmp" in file_path.lower() or "temp" in file_path.lower(): try: os.remove(file_path) temp_dir = os.path.dirname(file_path) if os.path.exists(temp_dir) and not os.listdir(temp_dir): os.rmdir(temp_dir) except: pass return "\n".join(text_list) except Exception as e: raise RuntimeError(f"读取DOCX文件失败: {str(e)}") def get_number_prefix(self, num_fmt, counter): """根据编号格式生成前缀""" if num_fmt == 'decimal': return f"{counter}." elif num_fmt == 'lowerLetter': return f"{self.number_to_letters(counter, False)}." elif num_fmt == 'upperLetter': return f"{self.number_to_letters(counter, True)}." elif num_fmt == 'lowerRoman': return f"{self.number_to_roman(counter).lower()}." elif num_fmt == 'upperRoman': return f"{self.number_to_roman(counter)}." elif num_fmt == 'bullet': return "•" else: return f"{counter}." def number_to_letters(self, n, uppercase=True): """将数字转换为字母(A, B, C, ... AA, AB, ...)""" result = "" while n > 0: n, remainder = divmod(n - 1, 26) result = chr(65 + remainder) + result return result if uppercase else result.lower() def number_to_roman(self, n): """将数字转换为罗马数字""" val = [ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ] syb = [ "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" ] roman_num = '' i = 0 while n > 0: for _ in range(n // val[i]): roman_num += syb[i] n -= val[i] i += 1 return roman_num if __name__ == "__main__": app = QApplication(sys.argv) window = DocumentReaderApp() window.show() sys.exit(app.exec_()) 这个程序可以读取wps、doc、docx文件,并可以识别自动编号,但识别的编号不对,比如,它会把“一、”“(一)”这样的编号识别成“1.”,这样就不符合原文的内容了。请帮我把这段代码修复一下
06-15
给出平均每家临街距离The plots, courtyards, and rooms include many variants. To be able to generate the variants, in the generation process the application of some rules could be altered by each other. The Hutong Neighbourhood Grammar is a parametric shape grammar. Focusing on the plan view, this grammar is defined in the Cartesian product of algebras: U12 × (V02 × V12 × V22). Shapes in algebras U12 include lines to represent the boundaries of Siheyuan plots and alleys. Labels are alphanumeric characters attached to a shape to represent additional information about the shape, which are employed to identify the available rules to be applied to the shape (Stiny, 1980). Shapes in algebras V02 include labelled points to represent the central point of a room plan and the midpoint of an edge of a room plan or a courtyard plan; shapes in algebras V12 include labelled line segments to represent the edge of Siheyuan plot, courtyard, and room; and shapes in algebras V22 include labelled plane segments to represent the plan of Siheyuan plot, courtyard, and room. In the rules, variables are introduced to control the generation of variants. For clarity, labels are used in the form of points, lines, or planes to mark the geometries in assistance in the derivation process, which are deleted once the generation is finished. The grammar describes the iteration of plots from Yuan to Qing dynasties and the generation of Siheyuan on the Qianlong Capital Map in a top-down fashion by dividing and iterating shapes representing the plots and courtyards and adding shapes representing rooms and gates. Corresponding to the historical planning of Hutong neighbourhoods, the generation process followed the steps: 1) generating the Hutong neighbourhood and dividing the neighbourhood into Siheyuan plots, 2) iterating Siheyuan plots, 3) dividing plots into courtyards and defining their types, 4) iterating courtyard, 5) defining room layout pattern and locating rooms and walls. Fig. 3 demonstrates the workflow of the grammar, the rules that could be applied in each step, and the shapes for this grammar. It is noted there are branches in some steps, which case variants of Siheyuan. In the grammar, the rectangles represent neighbourhoods, plots, sub-plots, courtyards, and rooms. The letters in the rectangles are employed to distinguish types of sub-plots and courtyards, and colours of rectangles are used to distinguish types of rooms. The black solid line segments represent the Siheyuan walls and the black dash line segments represent the courtyard walls. Fig. 3 Download: Download high-res image (905KB) Download: Download full-size image Fig. 3. The workflow and the shapes of the grammar. 3.1. Generation of Hutong neighbourhoods plan and Siheyuan plots As recorded in ancient literature such as Kao Gong Ji, an ideal Chinese city should be planned in a square shape to conform to the concept of “round sky and square earth (tian yuan di fang)”. When rebuilt by the Mongols in 1264, the scheme of Beijing was planned in a rectangular shape, which was close to the set forth by the Chinese philosophers. On this rectangular city plan, the urban neighbourhoods were also rectangular, enclosed by the south-north and east-west oriented streets, which caused an orthogonal grid system. This urban system passed through Yuan, Ming, and Qing dynasties and survived into the last century (Steinhardt, 1990). Zhao (1972) pointed out that, when Beijing was rebuilt in the Yuan dynasty, each neighbourhood's depth (length in south–north orientation) was planned to be 67.76 m and its width (length in east-west orientation) was 677.6 m. The Hutong alley between two adjacent neighbourhoods was 9.24 m wide. These key urban elements and dimensions are determining the initial shapes of the Hutong grammar. Each neighbourhood was averagely divided into ten plots aligned in an east–west orientation. We defined these neighbourhoods as “Type A Neighbourhood” (TAN). It is noted that some TANs were replanned in the Qing dynasty. Specifically, in the south-north orientation, two adjacent neighbourhoods were combined as a whole and were divided into three new neighbourhoods, with an alley between each of the two adjacent new neighbourhoods. We defined these new neighbourhoods as “Type B Neighborhoods” (TBN). The neighbourhoods planned in the Yuan dynasty (TAN) were divided into 67.67 m × 67.67 m Siheyuan plots. Although the development of neighbourhoods in the Qing dynasty changed the depth of both Siheyuan plots and neighbourhoods, the width remained. Two 67.76 × 677.6 m2 neighbourhood plans, represented by two rectangles are placed on a two-dimensional (XY) coordinate system, which is defined as the initial shape. On the XY coordinate system, the X-axis is defined as the east-west orientation and the Y-axis is defined as the north-south orientation, and the origin (0, 0) is on the southwest vertex of the south neighbourhood plan. Rule R1 describes the transformation of neighbourhoods from two TANs with one alley to three TBNs with two alleys. Variables associated with the rules are the neighbourhood depth (Nd) and the alley width (Aw), whose values are smaller than the original neighbourhood depth and alley width. Rules R2 describe the division of a TAN or a TBN neighbourhood into Siheyuan plots, represented by squares. Rules R1–R2 are shown in Fig. 4. Fig. 4 Download: Download high-res image (242KB) Download: Download full-size image Fig. 4. Rule R1 transforms TAN to TBN and Rule R2 divides a TAN or TBN into plots. 3.2. Siheyuan plots iteration It is noted the plots experienced iterations in various modes in Yuan, Ming, and Qing dynasties, which result in Siheyuan variants shown on the Qianlong Capital Map. 3.2.1. Division of plots into sub-plots A Siheyuan plot in the Yuan dynasty could be divided into two to four sub-plots in the east-west orientation. Each sub-plot could include several courtyards aligned in south-north orientation (Type A sub-plot, TASP) or empty space (Type B sub-plot, TBSP). We categorized six dividing patterns of a plot, by which the plot is divided into one or two sub-plot types. We found that the width of a TASP is normally around 12–35 m, while most TBSPs are close to or narrower than TASPs but wider than 5 m. Therefore, for simplification, we define the value of the parameter TASPw, the width of a TASP, which ranges from 12 to 35 m, and the value of the parameter TASPw, the width of a TBSP, from 5 to 12 m. The six division patterns of the plots are defined as Rules R3a to R3f respectively. In Fig. 5, Rule R3a divides a plot into two TASPs, and R3b divides a plot into three TASPs. Rule R3c and R3e describe three modes of dividing a plot into two TASPs and one TBSP. The difference between them is the location of the TBSP, which are in the east, west, and mid respectively. Rule 3f describes that a plot is divided into four sub-plots: two TASPs in the mid and a TBSP in the east and west respectively. In these rules, north-south orientated line segments are inserted into the plots to generate new rectangles on the XY plane to represent sub-plots. To locate these line segments, the variables, width of TASP (TASPw) and width of TBSP (TBSPw), are used for description. Fig. 5 Download: Download high-res image (479KB) Download: Download full-size image Fig. 5. Rule R3 divides a plot into sub-plots. Fig. 6 Download: Download high-res image (120KB) Download: Download full-size image Fig. 6. Rule R4 combines sub-plots to become a new sub-plot. 3.2.2. Sub-plot combination Some TASPs and TBSPs were combined to recreate new sub-plots. It is noted some sub-plots were additionally developed into new forms. As the historical material (E, 1739) recorded, to relieve the stress of the increase of the population of Beijing in the Qing dynasty, the government advocated using empty spaces to construct dwellings. It is noted that, since the width of TBSPs was usually too narrow to construct Siheyuan and many Siheyuans on TASPs were dilapidated or derelict due to the change of dynasty, some TASPs and TBSPs were combined to recreate new sub-plots. According to Liu's (2019) investigation of selected Siheyuan examples shown on the Qianlong Capital Map, we inferred the principles that one TASP could be combined with one adjacent TBSP to become a combined sub-plot, called Type AB sub-plot (TABSP). Then the TABSP could be used to construct a Siheyuan with a side courtyard. Since the TABSPs are wider than other types, it enables a Siheyuan to be built on the plot with two courtyards in the east-west orientation. Normally, on a TABSP, a set of courtyards are aligned in a south-north orientation, with a side courtyard next to these courtyards in parallel and connecting the south and north sub-plot boundaries. Rule R4a and R4b describe how a TASP and a TBSP combine to become a TABSP, as shown in Fig. 6. The difference between them is the locations of the TASP and the TBSP. On the right side of the rule, the line segment between the two sub-plots is removed and two rectangles are merged to become a new rectangle, representing the TABSP. The summation of the variables TASPw and TBSPw is the width of TABSP (TABSPw). 3.2.3. Sub-plot disaggregation and recombination The Siheyuan housings with a side courtyard were rare and usually belonged to upper-class owners in ancient times. In many cases, the TABSP disaggregates into many smaller sub-plots, called a Type ABd sub-plot (TABdSP), on which a one-courtyard Siheyuan is constructed. The disaggregation may also happen to some TASPs, whose disaggregated sub-plot is called a Type Ad sub-plot (TAdSP). Two TABdSPs or two TAdSPs adjacent in north-south orientation may be recombined to become a new sub-plot, called Type Ad2 sub-plot (TAd2SP) and Type ABd2 sub-plot (TABd2SP) respectively. In the disaggregation, the number of generated TAdSPs or TABdSPs in a north-south orientation, constrained by the depth of the neighbourhood, is 3 or 4 in most cases. For simplification, we assume it is 4 in TANs and 3 in TBNs. The number in the east-west orientation, constrained by the width of the sub-plot, is 2 or 3 mostly. We define it as 3 if the width is more than 20 m, otherwise 2. These Siheyuans built on disaggregated sub-plots are clustered, in which some Siheyuans are not on street. To create access to these Siheyuans, the west and east edges of disaggregated sub-plots that are adjacent in the east-west orientation, shrink to give space to generate a small south-north oriented alley. The alley might, or might not, cross the neighbourhood to connect the alleys on the south and north side of the neighbourhood. To simplify, we assume that an alley crosses the neighbourhood in this grammar. For 2 × 3 and 2 × 4 disaggregated sub-plots, an alley is generated by shrinking the sub-plot edges. 3 × 3 and 3 × 4 cases could be considered subplots in three rows aligned in parallel in the north-south orientation. For the pattern of three rows, it is unusual to generate an alley between every two adjacent rows. Alternatively, one small alley is generated between two rows in the way the same as the rules of 2 × 3 or 2 × 4 disaggregated sub-plots. For the third row of sub-plots that are not adjacent to the alley, if there are four sub-plots in the rest row, they will recombine to become two TAd2SPs/TABd2SPs, and if there are three sub-plots, two adjacent sub-plots will recombine to become a TAd2SPs/TABd2SP, both of which ensure each sub-plot to have access to the urban fabric. In the shrinkage, the movement distance of each sub-plot edge is slightly different, which makes the alley geometrically irregular. Except for the above disaggregation, there was another mode that a TASP separates into two sub-plots. Historically, a TASP was usually used to construct a three-courtyard Siheyuan or a four-courtyard Siheyuan, whose courtyards were aligned in a row in the north-south orientation. In this mode, the TASP separates by dividing the boundary of the second and the third courtyard, in which the original type of each courtyard remains. We call the separated sub-plot on the south side as the Type ASS sub-plot (TASSSP) and the one on the north as the Type ASN sub-plot (TASNSP). Rule R5 defines the disaggregation of a TASP and a TABSP. Considering the variants caused by neighbourhood depth and width, the rule includes variants Rule R5a-d. Line segments are introduced to indicate the edges of new sub-plots after the disaggregation of a TASP or a TABSP. In Rule R5a, two east-west orientated line segments and one north-south line segment are inserted to divide the TASP into 2 × 3 TAdSPs. In Rule R5b, there is one more east-west orientated line segment, enabling the generation of 2 × 4 TAdSPs. In Rule R5c, two east-west segments and two north-south segments are inserted to divide the plot into 3 × 3 TABdSPs. And in Rule R5d, one more east-west orientated segment than in R5c is introduced to divide the plot into 3 × 4 TABdSPs. The location of each line segment is important since they determine the size of each generated subplot. To describe them, including the inserted north-south orientated line segments and the line segments representing the east and west edges of the plot, the distances between each two of them are defined as w1, w2, and w3 from west to east. And the distances between each two east-west orientated line segments, including the ones representing the north and south edges of the plot and the inserted ones, are defined as d1, d2, d3, and d4 from south to north. These distances are variables to control the disaggregation. Rule R6 describes the generation of a small alley between two north-south orientated rows, which includes two variations. In Rule R6a, six TAdSPs or TABdSPs are clustered in two north-south orientated rows (2 × 3 mode) on the left of the rule. The shared edges of each two adjacent sub-plots in the west and east are labelled as thick line segments. On the right of the rule, for each segment, two copies of it are generated by offsetting itself in the east and west in the mirror using the segment as an axis, which are the boundaries between sub-plots and the small alley edge fragment. The distances describing the width of the small alley fragments (SAw1, SAw2, and SAw3) are variables in this rule. In Rule R6b, there are eight TAdSPs or TABdSPs clustered in two north-south orientated rows (2 × 4 mode). The generation of each small alley fragment is the same. The small alley fragments may move in the east-west orientation. Rule R7 is introduced to simulate the movement. In Rule R7, each pair of line segments moves in the east-west orientation using its mirror axis as an indicator. The displacement is a variable, (SAm1, SAm2, SAm3, and SAm4) in the east-west orientation, and the movement toward the east is positive (+x) and toward the west is negative (-x). The same as Rule R6, Rule R7 has two variations corresponding to the two clustered sub-plot modes. Rule R8 introduces the recombination of two TABdSPs or two TAdSPs, which normally happen to sub-plots that have no access to the urban fabric. In this rule, the shared edge of the two sub-plots adjacent in north-south orientation is removed and the two sub-plots are merged. Considering the disaggregation patterns and sub-plots locations, it includes three variations. Rule R8a-R8c. Rule R9 describes the division of a TASP into a TASNSP and a TASSSP. In the rule, an east-west line segment is inserted into the rectangle, whose variable is the depth of the TASSSP. Rules R5-R9 are shown in Fig. 7. Fig. 7 Download: Download high-res image (722KB) Download: Download full-size image Fig. 7. Rules R5-R9 define the disaggregation and recombination of sub-plots.
最新发布
06-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值